#!/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.
cat >javac_wrapper.sh <<"EOF"
  set -e # Stop on error - the caller script may not have this set.

  # Update arguments to add transformer and ASM to the compiler classpath.
  classpath="./transformer.jar:$ASM_JAR"
  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.
  transformer_args="-cp ${ASM_JAR}:transformer.jar transformer.IndyTransformer"
  for class in intermediate-classes/*.class ; do
    transformed_class=classes/$(basename ${class})
    ${JAVA:-java} ${transformer_args} $PWD/${class} ${transformed_class}
  done
EOF
export JAVAC=./javac_wrapper.sh

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

# 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')
${SOONG_ZIP} --jar -o transformer.jar -C classes -D classes
rm -rf classes

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