blob: ffc3edb7c4a43daae3c5963494adfe32ee576e59 [file] [log] [blame]
/*
* Copyright 2016 The Bazel Authors. All rights reserved.
*
* 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.
*/
package com.google.idea.blaze.android.sync;
import com.google.common.collect.ImmutableList;
import com.google.idea.blaze.android.sync.importer.BlazeAndroidWorkspaceImporter;
import com.google.idea.blaze.android.sync.model.BlazeAndroidSyncData;
import com.google.idea.blaze.base.ideinfo.AndroidRuleIdeInfo;
import com.google.idea.blaze.base.ideinfo.LibraryArtifact;
import com.google.idea.blaze.base.ideinfo.RuleIdeInfo;
import com.google.idea.blaze.base.model.BlazeProjectData;
import com.google.idea.blaze.base.model.primitives.Kind;
import com.google.idea.blaze.base.model.primitives.LanguageClass;
import com.google.idea.blaze.base.projectview.section.Glob;
import com.google.idea.blaze.base.sync.projectview.WorkspaceLanguageSettings;
import com.google.idea.blaze.java.sync.BlazeJavaSyncAugmenter;
import com.google.idea.blaze.java.sync.model.BlazeJarLibrary;
import com.google.idea.blaze.java.sync.model.BlazeLibrary;
import java.util.Collection;
/** Augments the java sync process with Android support. */
public class BlazeAndroidJavaSyncAugmenter extends BlazeJavaSyncAugmenter.Adapter {
@Override
public boolean isActive(WorkspaceLanguageSettings workspaceLanguageSettings) {
return workspaceLanguageSettings.isLanguageActive(LanguageClass.ANDROID);
}
@Override
public void addJarsForSourceRule(
RuleIdeInfo rule, Collection<BlazeJarLibrary> jars, Collection<BlazeJarLibrary> genJars) {
AndroidRuleIdeInfo androidRuleIdeInfo = rule.androidRuleIdeInfo;
if (androidRuleIdeInfo == null) {
return;
}
LibraryArtifact idlJar = androidRuleIdeInfo.idlJar;
if (idlJar != null) {
genJars.add(new BlazeJarLibrary(idlJar, rule.key));
}
if (BlazeAndroidWorkspaceImporter.shouldGenerateResources(androidRuleIdeInfo)
&& !BlazeAndroidWorkspaceImporter.shouldGenerateResourceModule(androidRuleIdeInfo)) {
// Add blaze's output unless it's a top level rule.
// In these cases the resource jar contains the entire
// transitive closure of R classes. It's unlikely this is wanted to resolve in the IDE.
boolean discardResourceJar = rule.kindIsOneOf(Kind.ANDROID_BINARY, Kind.ANDROID_TEST);
if (!discardResourceJar) {
LibraryArtifact resourceJar = androidRuleIdeInfo.resourceJar;
if (resourceJar != null) {
jars.add(new BlazeJarLibrary(resourceJar, rule.key));
}
}
}
}
@Override
public void addLibraryFilter(Glob.GlobSet excludedLibraries) {
excludedLibraries.add(new Glob("*/android_blaze.jar")); // This is supplied via the SDK
}
@Override
public Collection<BlazeLibrary> getAdditionalLibraries(BlazeProjectData blazeProjectData) {
BlazeAndroidSyncData syncData = blazeProjectData.syncState.get(BlazeAndroidSyncData.class);
if (syncData == null) {
return ImmutableList.of();
}
ImmutableList.Builder<BlazeLibrary> libraries = ImmutableList.builder();
if (syncData.importResult.resourceLibrary != null) {
libraries.add(syncData.importResult.resourceLibrary);
}
return libraries.build();
}
}