use of com.google.idea.blaze.android.sync.model.AndroidResourceModule in project intellij by bazelbuild.
the class AndroidResourceModuleRegistryTest method testPutAndGet.
@Test
public void testPutAndGet() {
Module moduleOne = mock(Module.class);
Module moduleTwo = mock(Module.class);
Module moduleThree = mock(Module.class);
AndroidResourceModule resourceModuleOne = AndroidResourceModule.builder(TargetKey.forPlainTarget(Label.create("//foo/bar:one"))).build();
AndroidResourceModule resourceModuleTwo = AndroidResourceModule.builder(TargetKey.forPlainTarget(Label.create("//foo/bar:two"))).build();
AndroidResourceModule resourceModuleThree = AndroidResourceModule.builder(TargetKey.forPlainTarget(Label.create("//foo/bar:three"))).build();
registry.put(moduleOne, resourceModuleOne);
registry.put(moduleTwo, resourceModuleTwo);
registry.put(moduleThree, resourceModuleThree);
assertThat(registry.get(moduleOne)).isEqualTo(resourceModuleOne);
assertThat(registry.get(moduleTwo)).isEqualTo(resourceModuleTwo);
assertThat(registry.get(moduleThree)).isEqualTo(resourceModuleThree);
assertThat(registry.getTargetKey(moduleOne)).isEqualTo(resourceModuleOne.targetKey);
assertThat(registry.getTargetKey(moduleTwo)).isEqualTo(resourceModuleTwo.targetKey);
assertThat(registry.getTargetKey(moduleThree)).isEqualTo(resourceModuleThree.targetKey);
assertThat(registry.getLabel(moduleOne)).isEqualTo(resourceModuleOne.targetKey.label);
assertThat(registry.getLabel(moduleTwo)).isEqualTo(resourceModuleTwo.targetKey.label);
assertThat(registry.getLabel(moduleThree)).isEqualTo(resourceModuleThree.targetKey.label);
}
use of com.google.idea.blaze.android.sync.model.AndroidResourceModule in project intellij by bazelbuild.
the class BlazeAndroidWorkspaceImporter method importWorkspace.
public BlazeAndroidImportResult importWorkspace() {
List<TargetIdeInfo> sourceTargets = targetMap.targets().stream().filter(target -> target.kind.languageClass == LanguageClass.ANDROID).filter(target -> target.androidIdeInfo != null).filter(importFilter::isSourceTarget).filter(target -> !importFilter.excludeTarget(target)).collect(Collectors.toList());
TransitiveResourceMap transitiveResourceMap = new TransitiveResourceMap(targetMap);
WorkspaceBuilder workspaceBuilder = new WorkspaceBuilder();
for (TargetIdeInfo target : sourceTargets) {
addSourceTarget(workspaceBuilder, transitiveResourceMap, target);
}
GeneratedResourceWarnings.submit(project, context, projectViewSet, artifactLocationDecoder, workspaceBuilder.generatedResourceLocations, whitelistedGenResourcePaths);
ImmutableList<AndroidResourceModule> androidResourceModules = buildAndroidResourceModules(workspaceBuilder);
BlazeResourceLibrary resourceLibrary = createResourceLibrary(androidResourceModules);
ImmutableList<AarLibrary> aarLibraries = createAarLibraries(sourceFilter.getLibraryTargets());
return new BlazeAndroidImportResult(androidResourceModules, resourceLibrary, aarLibraries, getJavacJar(targetMap.targets()));
}
use of com.google.idea.blaze.android.sync.model.AndroidResourceModule in project intellij by bazelbuild.
the class BlazeAndroidProjectStructureSyncer method updateInMemoryState.
private static void updateInMemoryState(Project project, WorkspaceRoot workspaceRoot, ProjectViewSet projectViewSet, BlazeProjectData blazeProjectData, Module workspaceModule, AndroidResourceModuleRegistry registry, LightResourceClassService.Builder rClassBuilder) {
BlazeAndroidSyncData syncData = blazeProjectData.syncState.get(BlazeAndroidSyncData.class);
if (syncData == null) {
return;
}
AndroidSdkPlatform androidSdkPlatform = syncData.androidSdkPlatform;
if (androidSdkPlatform == null) {
return;
}
updateWorkspaceModuleFacetInMemoryState(project, workspaceRoot, workspaceModule, androidSdkPlatform);
ArtifactLocationDecoder artifactLocationDecoder = blazeProjectData.artifactLocationDecoder;
ModuleFinder moduleFinder = ModuleFinder.getInstance(project);
Executor resourceRepositoryExecutor = Executors.newSingleThreadExecutor();
Module libraryResourcesModule = moduleFinder.findModuleByName(LIBRARY_RESOURCES_MODULE_NAME);
if (libraryResourcesModule != null) {
updateLibraryResourcesModuleFacetInMemoryState(project, workspaceRoot, libraryResourcesModule, androidSdkPlatform, syncData.importResult.resourceLibrary == null ? ImmutableList.of() : artifactLocationDecoder.decodeAll(syncData.importResult.resourceLibrary.sources), resourceRepositoryExecutor);
} else if (useLibraryResourcesModule.getValue()) {
logger.warn("Library resources module missing.");
}
for (AndroidResourceModule androidResourceModule : syncData.importResult.androidResourceModules) {
TargetIdeInfo target = blazeProjectData.targetMap.get(androidResourceModule.targetKey);
String moduleName = moduleNameForAndroidModule(target.key);
Module module = moduleFinder.findModuleByName(moduleName);
if (module == null) {
logger.warn("No module found for resource target: " + target.key);
continue;
}
registry.put(module, androidResourceModule);
AndroidIdeInfo androidIdeInfo = target.androidIdeInfo;
assert androidIdeInfo != null;
updateModuleFacetInMemoryState(project, androidSdkPlatform, module, moduleDirectoryForAndroidTarget(workspaceRoot, target), manifestFileForAndroidTarget(artifactLocationDecoder, androidIdeInfo, moduleDirectoryForAndroidTarget(workspaceRoot, target)), androidIdeInfo.resourceJavaPackage, artifactLocationDecoder.decodeAll(useLibraryResourcesModule.getValue() ? androidResourceModule.resources : androidResourceModule.transitiveResources), resourceRepositoryExecutor);
rClassBuilder.addRClass(androidIdeInfo.resourceJavaPackage, module);
}
Set<TargetKey> androidResourceModules = syncData.importResult.androidResourceModules.stream().map(androidResourceModule -> androidResourceModule.targetKey).collect(toSet());
List<TargetIdeInfo> runConfigurationTargets = getRunConfigurationTargets(project, projectViewSet, blazeProjectData, androidResourceModules);
for (TargetIdeInfo target : runConfigurationTargets) {
String moduleName = moduleNameForAndroidModule(target.key);
Module module = moduleFinder.findModuleByName(moduleName);
if (module == null) {
logger.warn("No module found for run configuration target: " + target.key);
continue;
}
AndroidIdeInfo androidIdeInfo = target.androidIdeInfo;
assert androidIdeInfo != null;
updateModuleFacetInMemoryState(project, androidSdkPlatform, module, moduleDirectoryForAndroidTarget(workspaceRoot, target), manifestFileForAndroidTarget(artifactLocationDecoder, androidIdeInfo, moduleDirectoryForAndroidTarget(workspaceRoot, target)), androidIdeInfo.resourceJavaPackage, ImmutableList.of(), null);
}
}
use of com.google.idea.blaze.android.sync.model.AndroidResourceModule in project intellij by bazelbuild.
the class BlazeAndroidProjectStructureSyncer method updateProjectStructure.
public static void updateProjectStructure(Project project, BlazeContext context, ProjectViewSet projectViewSet, BlazeProjectData blazeProjectData, BlazeSyncPlugin.ModuleEditor moduleEditor, Module workspaceModule, ModifiableRootModel workspaceModifiableModel, boolean isAndroidWorkspace) {
if (!isAndroidWorkspace) {
AndroidFacetModuleCustomizer.removeAndroidFacet(workspaceModule);
return;
}
BlazeAndroidSyncData syncData = blazeProjectData.syncState.get(BlazeAndroidSyncData.class);
if (syncData == null) {
return;
}
AndroidSdkPlatform androidSdkPlatform = syncData.androidSdkPlatform;
if (androidSdkPlatform == null) {
return;
}
// Configure workspace module as an android module
AndroidFacetModuleCustomizer.createAndroidFacet(workspaceModule);
Module libraryResourcesModule = null;
if (useLibraryResourcesModule.getValue()) {
libraryResourcesModule = moduleEditor.createModule(LIBRARY_RESOURCES_MODULE_NAME, StdModuleTypes.JAVA);
AndroidFacetModuleCustomizer.createAndroidFacet(libraryResourcesModule);
}
// Create android resource modules
// Because we're setting up dependencies, the modules have to exist before we configure them
Map<TargetKey, AndroidResourceModule> targetToAndroidResourceModule = Maps.newHashMap();
for (AndroidResourceModule androidResourceModule : syncData.importResult.androidResourceModules) {
targetToAndroidResourceModule.put(androidResourceModule.targetKey, androidResourceModule);
String moduleName = moduleNameForAndroidModule(androidResourceModule.targetKey);
Module module = moduleEditor.createModule(moduleName, StdModuleTypes.JAVA);
AndroidFacetModuleCustomizer.createAndroidFacet(module);
}
// Configure android resource modules
int totalOrderEntries = 0;
Set<File> existingRoots = Sets.newHashSet();
for (AndroidResourceModule androidResourceModule : targetToAndroidResourceModule.values()) {
TargetIdeInfo target = blazeProjectData.targetMap.get(androidResourceModule.targetKey);
AndroidIdeInfo androidIdeInfo = target.androidIdeInfo;
assert androidIdeInfo != null;
String moduleName = moduleNameForAndroidModule(target.key);
Module module = moduleEditor.findModule(moduleName);
assert module != null;
ModifiableRootModel modifiableRootModel = moduleEditor.editModule(module);
Collection<File> resources = blazeProjectData.artifactLocationDecoder.decodeAll(androidResourceModule.resources);
if (useCyclicResourceDependency.getValue()) {
// Remove existing resource roots to silence the duplicate content root error.
// We can only do this if we have cyclic resource dependencies, since otherwise we risk
// breaking dependencies within this resource module.
resources.removeAll(existingRoots);
existingRoots.addAll(resources);
}
ResourceModuleContentRootCustomizer.setupContentRoots(modifiableRootModel, resources);
if (useCyclicResourceDependency.getValue()) {
modifiableRootModel.addModuleOrderEntry(workspaceModule);
++totalOrderEntries;
} else {
for (TargetKey resourceDependency : androidResourceModule.transitiveResourceDependencies) {
if (!targetToAndroidResourceModule.containsKey(resourceDependency)) {
continue;
}
String dependencyModuleName = moduleNameForAndroidModule(resourceDependency);
Module dependency = moduleEditor.findModule(dependencyModuleName);
if (dependency == null) {
continue;
}
modifiableRootModel.addModuleOrderEntry(dependency);
++totalOrderEntries;
}
}
if (libraryResourcesModule != null) {
// Add a dependency from the resource module to the shared library resources module
modifiableRootModel.addModuleOrderEntry(libraryResourcesModule);
++totalOrderEntries;
}
// Add a dependency from the workspace to the resource module
ModuleOrderEntry orderEntry = workspaceModifiableModel.addModuleOrderEntry(module);
++totalOrderEntries;
if (useCyclicResourceDependency.getValue()) {
orderEntry.setExported(true);
}
}
List<TargetIdeInfo> runConfigurationTargets = getRunConfigurationTargets(project, projectViewSet, blazeProjectData, targetToAndroidResourceModule.keySet());
for (TargetIdeInfo target : runConfigurationTargets) {
TargetKey targetKey = target.key;
String moduleName = moduleNameForAndroidModule(targetKey);
Module module = moduleEditor.createModule(moduleName, StdModuleTypes.JAVA);
AndroidFacetModuleCustomizer.createAndroidFacet(module);
}
int whitelistedGenResources = projectViewSet.listItems(GeneratedAndroidResourcesSection.KEY).size();
context.output(PrintOutput.log(String.format("Android resource module count: %d, run config modules: %d, order entries: %d, " + "generated resources: %d", syncData.importResult.androidResourceModules.size(), runConfigurationTargets.size(), totalOrderEntries, whitelistedGenResources)));
}
Aggregations