1#!/bin/bash 2# 3# Copyright (C) 2017 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17JAVAC_SOURCE=1.8 18JAVAC_TARGET=1.8 19 20JAVAC_FLAGS="-source ${JAVAC_SOURCE} -target ${JAVAC_TARGET}" 21 22# Suppress warning over bootclass path from Java 9 compiler (if used). 23JAVAC_FLAGS="${JAVAC_FLAGS} -Xlint:-options" 24 25# Check interface method defintions cause warnings and {default,static} 26# interface method invocations fail hard. 27declare -A SUPPORT_THRESHOLD 28SUPPORT_THRESHOLD["DefaultDefinition.class"]=0 29SUPPORT_THRESHOLD["InvokeStatic.class"]=24 30SUPPORT_THRESHOLD["InvokeDefault.class"]=24 31SUPPORT_THRESHOLD["StaticDefinition.class"]=0 32 33CLASS_FILES=${!SUPPORT_THRESHOLD[@]} 34SOURCE_FILES=${CLASS_FILES//class/java} 35 36${JAVAC} ${JAVAC_FLAGS} ${SOURCE_FILES} 37 38for API_LEVEL in 19 20 21 22 23 24 25; do 39 echo --------------------- Testing $API_LEVEL ------------------------ 40 for c in $CLASS_FILES; do 41 echo $c 42 dx --dex --dump-width=500 --dump-to=$c.log --min-sdk-version=$API_LEVEL $c 43 if [ $? = 0 ]; then 44 if [[ $API_LEVEL -lt ${SUPPORT_THRESHOLD[$c]} ]]; then 45 echo Unexpected success for $c at API level $API_LEVEL 1>&2 46 cat $c.log 47 exit 0 48 fi 49 else 50 if [[ $API_LEVEL -ge ${SUPPORT_THRESHOLD[$c]} ]]; then 51 echo Unexpected failure for $c at API level $API_LEVEL 1>&2 52 exit 0 53 fi 54 fi 55 done 56done 57 58# Now repeat with --allowAllInterfaceMethodInvokes which turns hard 59# failures for {default,static} interface invokes to warnings. 60EXTRA_DX_FLAG=--allow-all-interface-method-invokes 61 62SUPPORT_THRESHOLD["DefaultDefinition.class"]=0 63SUPPORT_THRESHOLD["InvokeStatic.class"]=21 64SUPPORT_THRESHOLD["InvokeDefault.class"]=0 65SUPPORT_THRESHOLD["StaticDefinition.class"]=0 66 67CLASS_FILES=${!SUPPORT_THRESHOLD[@]} 68SOURCE_FILES=${CLASS_FILES//class/java} 69 70${JAVAC} ${JAVAC_FLAGS} ${SOURCE_FILES} 71 72for API_LEVEL in 19 20 21 22 23 24 25; do 73 echo --------------------- Testing $API_LEVEL ------------------------ 74 for c in $CLASS_FILES; do 75 echo $c 76 dx --dex --dump-width=500 --dump-to=$c.log --min-sdk-version=$API_LEVEL $EXTRA_DX_FLAG $c 77 if [ $? = 0 ]; then 78 if [[ $API_LEVEL -lt ${SUPPORT_THRESHOLD[$c]} ]]; then 79 echo Unexpected success for $c at API level $API_LEVEL 1>&2 80 cat $c.log 81 exit 0 82 fi 83 else 84 if [[ $API_LEVEL -ge ${SUPPORT_THRESHOLD[$c]} ]]; then 85 echo Unexpected failure for $c at API level $API_LEVEL 1>&2 86 exit 0 87 fi 88 fi 89 done 90done 91