{# Copyright 2016 The Chromium Authors. All rights reserved. #}
{# Use of this source code is governed by a BSD-style license that can be #}
{# found in the LICENSE file. #}
// Generated by //build/android/generate_gradle.py

apply plugin: "java"
{% if template_type == 'java_binary' %}
apply plugin: "application"
{% endif %}

sourceSets {
    main {
        java.srcDirs = [
{% for path in main.java_dirs %}
            "{{ path }}",
{% endfor %}
        ]
{% if main.java_excludes is defined %}
        java.filter.exclude([
{% for path in main.java_excludes %}
            "{{ path }}",
{% endfor %}
        ])
{% endif %}
    }
}

sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

{% if template_type == 'java_binary' %}
applicationName = "{{ target_name }}"
{% if main_class %}
mainClassName = "{{ main_class }}"
{% endif %}
{% endif %}
{% if template_type in ('java_binary', 'java_library') %}
archivesBaseName = "{{ target_name }}"
{% endif %}

{% include 'dependencies.jinja' %}
