#!/bin/bash
#
# Copyright 2018 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.

# Stop on failure.
set -e

export ASM_JAR="${ANDROID_BUILD_TOP}/prebuilts/misc/common/asm/asm-6.0.jar"

export ORIGINAL_JAVAC="$JAVAC"

# Wrapper function for javac which invokes the compiler and applies
# transforms to class files after compilation.
function javac_wrapper {
  set -e # Stop on error - the caller script may not have this set.

  # Update arguments to add transformer and ASM to the compiler classpath.
  local args=()
  local classpath="./transformer.jar:$ASM_JAR"
  while [ $# -ne 0 ] ; do
    case $1 in
      -cp|-classpath|--class-path)
        shift
        shift
        args+=(-cp $classpath)
        ;;
      *)
        args+=("$1")
        shift
        ;;
    esac
  done

  # Compile.
  $ORIGINAL_JAVAC "${args[@]}"

  # Move original classes to intermediate location.
  mv classes intermediate-classes
  mkdir classes

  # Transform intermediate classes.
  local transformer_args="-cp ${ASM_JAR}:transformer.jar transformer.IndyTransformer"
  for class in intermediate-classes/*.class ; do
    local transformed_class=classes/$(basename ${class})
    ${JAVA:-java} ${transformer_args} $PWD/${class} ${transformed_class}
  done
}

export -f javac_wrapper
export JAVAC=javac_wrapper

######################################################################

# Build the transformer to apply to compiled classes.
mkdir classes
${ORIGINAL_JAVAC:-javac} ${JAVAC_ARGS} -cp "${ASM_JAR}" -d classes $(find util-src -name '*.java')
jar -cf transformer.jar -C classes transformer/ -C classes annotations/
rm -rf classes

# Use API level 28 for invoke-custom bytecode support.
DESUGAR=false ./default-build "$@" --api-level 28
