blob: cd00e63ac04164437c86264085f27386c8697be9 [file] [log] [blame]
/*
* Copyright (C) 2013 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 excodess or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.build.gradle.internal;
import static com.google.common.base.Preconditions.checkNotNull;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Charsets;
import java.util.Locale;
import javax.inject.Inject;
import org.gradle.api.JavaVersion;
/**
* Java compilation options.
*/
public class CompileOptions {
private static final String VERSION_PREFIX = "VERSION_";
@Nullable
private JavaVersion sourceCompatibility;
@Nullable
private JavaVersion targetCompatibility;
@NonNull
private String encoding = Charsets.UTF_8.name();
@Nullable private Boolean incremental = null;
/** @see #setDefaultJavaVersion(JavaVersion) */
@NonNull
@VisibleForTesting
JavaVersion defaultJavaVersion = JavaVersion.VERSION_1_6;
@Inject
public CompileOptions() {}
/** @see #getSourceCompatibility() */
public void setSourceCompatibility(@NonNull Object sourceCompatibility) {
this.sourceCompatibility = convert(sourceCompatibility);
}
/** @see #getSourceCompatibility() */
public void setSourceCompatibility(@NonNull JavaVersion sourceCompatibility) {
this.sourceCompatibility = sourceCompatibility;
}
/**
* Language level of the java source code.
*
* <p>Similar to what <a href="http://www.gradle.org/docs/current/userguide/java_plugin.html">
* Gradle Java plugin</a> uses. Formats supported are:
* <ul>
* <li><code>"1.6"</code></li>
* <li><code>1.6</code></li>
* <li><code>JavaVersion.Version_1_6</code></li>
* <li><code>"Version_1_6"</code></li>
* </ul>
*/
@NonNull
public JavaVersion getSourceCompatibility() {
return sourceCompatibility != null ? sourceCompatibility : defaultJavaVersion;
}
/** @see #getTargetCompatibility() */
public void setTargetCompatibility(@NonNull Object targetCompatibility) {
this.targetCompatibility = convert(targetCompatibility);
}
/** @see #getTargetCompatibility() */
public void setTargetCompatibility(@NonNull JavaVersion targetCompatibility) {
this.targetCompatibility = targetCompatibility;
}
/**
* Version of the generated Java bytecode.
*
* <p>Similar to what <a href="http://www.gradle.org/docs/current/userguide/java_plugin.html">
* Gradle Java plugin</a> uses. Formats supported are:
* <ul>
* <li><code>"1.6"</code></li>
* <li><code>1.6</code></li>
* <li><code>JavaVersion.Version_1_6</code></li>
* <li><code>"Version_1_6"</code></li>
* </ul>
*/
@NonNull
public JavaVersion getTargetCompatibility() {
return targetCompatibility != null ? targetCompatibility : defaultJavaVersion;
}
/** @see #getEncoding() */
public void setEncoding(@NonNull String encoding) {
this.encoding = checkNotNull(encoding);
}
/**
* Java source files encoding.
*/
@NonNull
public String getEncoding() {
return encoding;
}
/**
* Default java version, based on the target SDK. Set by the plugin, not meant to be used in
* build files by users.
*/
public void setDefaultJavaVersion(@NonNull JavaVersion defaultJavaVersion) {
this.defaultJavaVersion = checkNotNull(defaultJavaVersion);
}
/**
* Whether Java compilation should be incremental or not.
*
* <p>The default value is {@code true}.
*
* <p>Note that even if this option is set to {@code true}, Java compilation may still be
* non-incremental (e.g., if incremental annotation processing is not yet possible in the
* project).
*/
@Nullable
public Boolean getIncremental() {
return incremental;
}
/** @see #getIncremental() */
public void setIncremental(boolean incremental) {
this.incremental = incremental;
}
/**
* Converts all possible supported way of specifying a Java version to a {@link JavaVersion}.
* @param version the user provided java version.
*/
@NonNull
private static JavaVersion convert(@NonNull Object version) {
// for backward version reasons, we support setting strings like 'Version_1_6'
if (version instanceof String) {
final String versionString = (String) version;
if (versionString.toUpperCase(Locale.ENGLISH).startsWith(VERSION_PREFIX)) {
version = versionString.substring(VERSION_PREFIX.length()).replace('_', '.');
}
}
return JavaVersion.toVersion(version);
}
}