91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
| #!/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
 |