#!/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 classpath="./transformer.jar:$ASM_JAR"
  local args=(-cp $classpath)
  while [ $# -ne 0 ] ; do
    case $1 in
      -cp|-classpath|--class-path)
        shift
        shift
        ;;
      *)
        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
