Search in sources :

Example 41 with BlazeProjectData

use of com.google.idea.blaze.base.model.BlazeProjectData in project intellij by bazelbuild.

the class LibraryEditor method updateProjectLibraries.

public static void updateProjectLibraries(Project project, BlazeContext context, ProjectViewSet projectViewSet, BlazeProjectData blazeProjectData, Collection<BlazeLibrary> libraries) {
    Set<LibraryKey> intelliJLibraryState = Sets.newHashSet();
    for (Library library : ProjectLibraryTable.getInstance(project).getLibraries()) {
        String name = library.getName();
        if (name != null) {
            intelliJLibraryState.add(LibraryKey.fromIntelliJLibraryName(name));
        }
    }
    context.output(PrintOutput.log(String.format("Workspace has %d libraries", libraries.size())));
    LibraryTable libraryTable = ProjectLibraryTable.getInstance(project);
    LibraryTable.ModifiableModel libraryTableModel = libraryTable.getModifiableModel();
    try {
        for (BlazeLibrary library : libraries) {
            updateLibrary(project, blazeProjectData.artifactLocationDecoder, libraryTable, libraryTableModel, library);
        }
        // Garbage collect unused libraries
        List<LibrarySource> librarySources = Lists.newArrayList();
        for (BlazeSyncPlugin syncPlugin : BlazeSyncPlugin.EP_NAME.getExtensions()) {
            LibrarySource librarySource = syncPlugin.getLibrarySource(projectViewSet, blazeProjectData);
            if (librarySource != null) {
                librarySources.add(librarySource);
            }
        }
        Predicate<Library> gcRetentionFilter = librarySources.stream().map(LibrarySource::getGcRetentionFilter).filter(Objects::nonNull).reduce(Predicate::or).orElse(o -> false);
        Set<LibraryKey> newLibraryKeys = libraries.stream().map((blazeLibrary) -> blazeLibrary.key).collect(Collectors.toSet());
        for (LibraryKey libraryKey : intelliJLibraryState) {
            String libraryIntellijName = libraryKey.getIntelliJLibraryName();
            if (!newLibraryKeys.contains(libraryKey)) {
                Library library = libraryTable.getLibraryByName(libraryIntellijName);
                if (!gcRetentionFilter.test(library)) {
                    if (library != null) {
                        libraryTableModel.removeLibrary(library);
                    }
                }
            }
        }
    } finally {
        libraryTableModel.commit();
    }
}
Also used : LibraryKey(com.google.idea.blaze.base.model.LibraryKey) BlazeSyncPlugin(com.google.idea.blaze.base.sync.BlazeSyncPlugin) BlazeContext(com.google.idea.blaze.base.scope.BlazeContext) OrderRootType(com.intellij.openapi.roots.OrderRootType) BlazeLibrary(com.google.idea.blaze.base.model.BlazeLibrary) Predicate(java.util.function.Predicate) Collection(java.util.Collection) ProjectLibraryTable(com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable) Set(java.util.Set) PrintOutput(com.google.idea.blaze.base.scope.output.PrintOutput) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) Objects(java.util.Objects) Library(com.intellij.openapi.roots.libraries.Library) BlazeProjectData(com.google.idea.blaze.base.model.BlazeProjectData) List(java.util.List) Lists(com.google.common.collect.Lists) ModifiableRootModel(com.intellij.openapi.roots.ModifiableRootModel) ProjectViewSet(com.google.idea.blaze.base.projectview.ProjectViewSet) LibraryTable(com.intellij.openapi.roots.libraries.LibraryTable) Project(com.intellij.openapi.project.Project) Logger(com.intellij.openapi.diagnostic.Logger) ArtifactLocationDecoder(com.google.idea.blaze.base.sync.workspace.ArtifactLocationDecoder) BlazeLibrary(com.google.idea.blaze.base.model.BlazeLibrary) ProjectLibraryTable(com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable) LibraryTable(com.intellij.openapi.roots.libraries.LibraryTable) Objects(java.util.Objects) LibraryKey(com.google.idea.blaze.base.model.LibraryKey) BlazeSyncPlugin(com.google.idea.blaze.base.sync.BlazeSyncPlugin) BlazeLibrary(com.google.idea.blaze.base.model.BlazeLibrary) Library(com.intellij.openapi.roots.libraries.Library)

Example 42 with BlazeProjectData

use of com.google.idea.blaze.base.model.BlazeProjectData in project intellij by bazelbuild.

the class AndroidSyncTest method testMultipleToolchainsNoIssue.

@Test
public void testMultipleToolchainsNoIssue() {
    // Test what happens if there are multiple toolchains in the target map
    // (e.g., from --fat_apk_cpu)
    setProjectView("directories:", "  java/com/google", "targets:", "  //java/com/google:app", "additional_languages:", "  c", "android_sdk_platform: android-25");
    workspace.createDirectory(new WorkspacePath("java/com/google"));
    workspace.createFile(new WorkspacePath("java/com/google/Source.java"), "package com.google;", "public class Source {}");
    workspace.createFile(new WorkspacePath("java/com/google/Other.java"), "package com.google;", "public class Other {}");
    workspace.createFile(new WorkspacePath("java/com/google/jni/native.cc"), "void foo() {}");
    workspace.createFile(new WorkspacePath("java/com/google/jni/native2.cc"), "void bar() {}");
    TargetMap targetMap = TargetMapBuilder.builder().addTarget(TargetIdeInfo.builder().setBuildFile(sourceRoot("android_ndk_linux/toolchains/BUILD")).setLabel("//android_ndk_linux/toolchains:armv7a").setKind(Kind.CC_TOOLCHAIN).setCToolchainInfo(CToolchainIdeInfo.builder().setTargetName("arm-linux-androideabi").setCppExecutable(new ExecutionRootPath("bin/arm-linux-androideabi-gcc")).addBaseCompilerOptions(ImmutableList.of("-DOS_ANDROID", "-mbionic", "-ffunction-sections", "-march=armv7-a", "-mfpu=vfpv3-d16")).addCppCompilerOptions(ImmutableList.of("-std=gnu++11")).addBuiltInIncludeDirectories(ImmutableList.of(new ExecutionRootPath("lib/gcc/arm-linux-androideabi/4.8/include"))).addUnfilteredCompilerOptions(ImmutableList.of("--sysroot=android_ndk_linux/platforms/android-18/arch-arm")).addUnfilteredToolchainSystemIncludes(ImmutableList.of(new ExecutionRootPath("android_ndk_linux/sources/llvm-libc++/libcxx/include"))))).addTarget(TargetIdeInfo.builder().setBuildFile(sourceRoot("android_ndk_linux/toolchains/BUILD")).setLabel("//android_ndk_linux/toolchains:aarch64").setKind(Kind.CC_TOOLCHAIN).setCToolchainInfo(CToolchainIdeInfo.builder().setTargetName("aarch64-linux-android").setCppExecutable(new ExecutionRootPath("prebuilt/bin/aarch64-linux-android-gcc")).addBaseCompilerOptions(ImmutableList.of("-DOS_ANDROID", "-mbionic", "-ffunction-sections")).addCppCompilerOptions(ImmutableList.of("-std=gnu++11")).addBuiltInIncludeDirectories(ImmutableList.of(new ExecutionRootPath("lib/gcc/aarch64-linux-android/4.9/include"))).addUnfilteredCompilerOptions(ImmutableList.of("--sysroot=android_ndk_linux/platforms/android-21/arch-arm64")).addUnfilteredToolchainSystemIncludes(ImmutableList.of(new ExecutionRootPath("android_ndk_linux/sources/llvm-libc++/libcxx/include"))))).addTarget(TargetIdeInfo.builder().setBuildFile(sourceRoot("java/com/google/BUILD")).setLabel("//java/com/google:lib").setKind("android_library").setAndroidInfo(AndroidIdeInfo.builder().setManifestFile(sourceRoot("java/com/google/AndroidManifest.xml")).addResource(sourceRoot("java/com/google/res/values/strings.xml")).setResourceJavaPackage("com.google").setGenerateResourceClass(true)).addSource(sourceRoot("java/com/google/Other.java"))).addTarget(TargetIdeInfo.builder().setBuildFile(sourceRoot("java/com/google/BUILD")).setLabel("//java/com/google:native_lib").setKind("cc_library").setCInfo(CIdeInfo.builder().addTransitiveQuoteIncludeDirectories(ImmutableList.of(new ExecutionRootPath("."), new ExecutionRootPath("blaze-out/android-aarch64-etc/genfiles"), new ExecutionRootPath("blaze-out/android-aarch64-etc/genfiles/third_party/java"))).addTransitiveSystemIncludeDirectories(ImmutableList.of(new ExecutionRootPath("third_party/stl/gcc3"), new ExecutionRootPath("third_party/java/jdk/include"))).addSource(sourceRoot("java/com/google/jni/native.cc"))).addSource(sourceRoot("java/com/google/jni/native.cc")).addDependency("//android_ndk_linux/toolchains:aarch64")).addTarget(TargetIdeInfo.builder().setBuildFile(sourceRoot("java/com/google/BUILD")).setLabel("//java/com/google:native_lib2").setKind("cc_library").setCInfo(CIdeInfo.builder().addTransitiveQuoteIncludeDirectories(ImmutableList.of(new ExecutionRootPath("."), new ExecutionRootPath("blaze-out/android-aarch64-etc/genfiles"), new ExecutionRootPath("blaze-out/android-aarch64-etc/genfiles/third_party/java"))).addTransitiveSystemIncludeDirectories(ImmutableList.of(new ExecutionRootPath("third_party/stl/gcc3"), new ExecutionRootPath("third_party/java/jdk/include"))).addSource(sourceRoot("java/com/google/jni/native2.cc"))).addSource(sourceRoot("java/com/google/jni/native2.cc")).addDependency("//java/com/google:native_lib").addDependency("//android_ndk_linux/toolchains:armv7a")).addTarget(TargetIdeInfo.builder().setBuildFile(sourceRoot("java/com/google/BUILD")).setLabel("//java/com/google:app").setKind("android_binary").setAndroidInfo(AndroidIdeInfo.builder().setManifestFile(sourceRoot("java/com/google/AndroidManifest.xml")).setResourceJavaPackage("com.google").setGenerateResourceClass(true)).addSource(sourceRoot("java/com/google/Source.java")).addDependency("//tools/jdk:toolchain").addDependency("//android_ndk_linux/toolchains:armv7a").addDependency("//java/com/google:lib").addDependency("//java/com/google:native_lib").addDependency("//java/com/google:native_lib2")).build();
    setTargetMap(targetMap);
    runBlazeSync(new BlazeSyncParams.Builder("Sync", SyncMode.INCREMENTAL).addProjectViewTargets(true).build());
    errorCollector.assertNoIssues();
    BlazeProjectData blazeProjectData = BlazeProjectDataManager.getInstance(getProject()).getBlazeProjectData();
    assertThat(blazeProjectData).isNotNull();
    assertThat(blazeProjectData.targetMap).isEqualTo(targetMap);
    assertThat(blazeProjectData.workspaceLanguageSettings.getWorkspaceType()).isEqualTo(WorkspaceType.ANDROID);
    assertThat(blazeProjectData.workspaceLanguageSettings.isLanguageActive(LanguageClass.C)).isTrue();
    // Check that the workspace is set to android
    Module workspaceModule = ModuleFinder.getInstance(getProject()).findModuleByName(BlazeDataStorage.WORKSPACE_MODULE_NAME);
    assertThat(workspaceModule).isNotNull();
    assertThat(AndroidFacet.getInstance(workspaceModule)).isNotNull();
    // Check resolve configurations for the native code match the toolchain that was in
    // the library's deps (not switched for some reason).
    VirtualFile nativeCc = fileSystem.findFile(workspaceRoot.fileForPath(new WorkspacePath("java/com/google/jni/native.cc")).getPath());
    VirtualFile nativeCc2 = fileSystem.findFile(workspaceRoot.fileForPath(new WorkspacePath("java/com/google/jni/native2.cc")).getPath());
    List<? extends OCResolveConfiguration> resolveConfigurations = OCWorkspaceManager.getWorkspace(getProject()).getConfigurationsForFile(nativeCc);
    assertThat(resolveConfigurations).hasSize(1);
    OCCompilerSettings compilerSettings = resolveConfigurations.get(0).getCompilerSettings();
    List<String> compilerSwitches = CidrCompilerSwitchesAdapter.getCommandLineArgs(compilerSettings.getCompilerSwitches(OCLanguageKind.CPP, nativeCc));
    assertThat(compilerSwitches).contains("--sysroot=android_ndk_linux/platforms/android-21/arch-arm64");
    resolveConfigurations = OCWorkspaceManager.getWorkspace(getProject()).getConfigurationsForFile(nativeCc2);
    assertThat(resolveConfigurations).hasSize(1);
    compilerSettings = resolveConfigurations.get(0).getCompilerSettings();
    compilerSwitches = CidrCompilerSwitchesAdapter.getCommandLineArgs(compilerSettings.getCompilerSwitches(OCLanguageKind.CPP, nativeCc));
    assertThat(compilerSwitches).contains("--sysroot=android_ndk_linux/platforms/android-18/arch-arm");
}
Also used : WorkspacePath(com.google.idea.blaze.base.model.primitives.WorkspacePath) VirtualFile(com.intellij.openapi.vfs.VirtualFile) OCCompilerSettings(com.jetbrains.cidr.lang.workspace.compiler.OCCompilerSettings) BlazeProjectData(com.google.idea.blaze.base.model.BlazeProjectData) ExecutionRootPath(com.google.idea.blaze.base.model.primitives.ExecutionRootPath) Module(com.intellij.openapi.module.Module) TargetMap(com.google.idea.blaze.base.ideinfo.TargetMap) BlazeSyncParams(com.google.idea.blaze.base.sync.BlazeSyncParams) Test(org.junit.Test)

Example 43 with BlazeProjectData

use of com.google.idea.blaze.base.model.BlazeProjectData 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);
    }
}
Also used : SdkUtil(com.google.idea.blaze.android.sync.sdk.SdkUtil) GeneratedAndroidResourcesSection(com.google.idea.blaze.android.projectview.GeneratedAndroidResourcesSection) ModuleFinder(com.google.idea.blaze.base.sync.projectstructure.ModuleFinder) LightResourceClassService(com.google.idea.blaze.android.resources.LightResourceClassService) BlazeProjectData(com.google.idea.blaze.base.model.BlazeProjectData) ModuleOrderEntry(com.intellij.openapi.roots.ModuleOrderEntry) ModifiableRootModel(com.intellij.openapi.roots.ModifiableRootModel) Map(java.util.Map) TargetExpression(com.google.idea.blaze.base.model.primitives.TargetExpression) MultiResourceRepository(com.android.tools.idea.res.MultiResourceRepository) Logger(com.intellij.openapi.diagnostic.Logger) Module(com.intellij.openapi.module.Module) Collectors.toSet(java.util.stream.Collectors.toSet) AndroidResourceModuleRegistry(com.google.idea.blaze.android.sync.model.AndroidResourceModuleRegistry) DumbService(com.intellij.openapi.project.DumbService) AndroidResourceModule(com.google.idea.blaze.android.sync.model.AndroidResourceModule) StdModuleTypes(com.intellij.openapi.module.StdModuleTypes) Collection(java.util.Collection) Set(java.util.Set) PrintOutput(com.google.idea.blaze.base.scope.output.PrintOutput) Sets(com.google.common.collect.Sets) BlazeProjectDataManager(com.google.idea.blaze.base.sync.data.BlazeProjectDataManager) Executors(java.util.concurrent.Executors) TargetSection(com.google.idea.blaze.base.projectview.section.sections.TargetSection) SourceProviderImpl(com.google.idea.blaze.android.sync.model.idea.SourceProviderImpl) List(java.util.List) ProjectViewSet(com.google.idea.blaze.base.projectview.ProjectViewSet) WorkspaceRoot(com.google.idea.blaze.base.model.primitives.WorkspaceRoot) ApplicationManager(com.intellij.openapi.application.ApplicationManager) TargetKey(com.google.idea.blaze.base.ideinfo.TargetKey) ArtifactLocationDecoder(com.google.idea.blaze.base.sync.workspace.ArtifactLocationDecoder) BlazeAndroidSyncData(com.google.idea.blaze.android.sync.model.BlazeAndroidSyncData) BlazeContext(com.google.idea.blaze.base.scope.BlazeContext) RunConfiguration(com.intellij.execution.configurations.RunConfiguration) ModuleResourceRepository(com.android.tools.idea.res.ModuleResourceRepository) AndroidSdkPlatform(com.google.idea.blaze.android.sync.model.AndroidSdkPlatform) AndroidIdeInfo(com.google.idea.blaze.base.ideinfo.AndroidIdeInfo) Kind(com.google.idea.blaze.base.model.primitives.Kind) Lists(com.google.common.collect.Lists) ImmutableList(com.google.common.collect.ImmutableList) BoolExperiment(com.google.idea.common.experiments.BoolExperiment) ModuleEditorProvider(com.google.idea.blaze.base.sync.projectstructure.ModuleEditorProvider) RunManager(com.intellij.execution.RunManager) TargetIdeInfo(com.google.idea.blaze.base.ideinfo.TargetIdeInfo) Project(com.intellij.openapi.project.Project) SourceProvider(com.android.builder.model.SourceProvider) Nullable(javax.annotation.Nullable) BlazeSyncPlugin(com.google.idea.blaze.base.sync.BlazeSyncPlugin) ArtifactLocation(com.google.idea.blaze.base.ideinfo.ArtifactLocation) BlazeAndroidRunConfigurationHandler(com.google.idea.blaze.android.run.BlazeAndroidRunConfigurationHandler) Executor(java.util.concurrent.Executor) BlazeImportSettingsManager(com.google.idea.blaze.base.settings.BlazeImportSettingsManager) AndroidFacet(org.jetbrains.android.facet.AndroidFacet) Maps(com.google.common.collect.Maps) File(java.io.File) BlazeAndroidModel(com.google.idea.blaze.android.sync.model.idea.BlazeAndroidModel) Label(com.google.idea.blaze.base.model.primitives.Label) ModuleFinder(com.google.idea.blaze.base.sync.projectstructure.ModuleFinder) AndroidResourceModule(com.google.idea.blaze.android.sync.model.AndroidResourceModule) TargetIdeInfo(com.google.idea.blaze.base.ideinfo.TargetIdeInfo) AndroidSdkPlatform(com.google.idea.blaze.android.sync.model.AndroidSdkPlatform) Executor(java.util.concurrent.Executor) ArtifactLocationDecoder(com.google.idea.blaze.base.sync.workspace.ArtifactLocationDecoder) TargetKey(com.google.idea.blaze.base.ideinfo.TargetKey) BlazeAndroidSyncData(com.google.idea.blaze.android.sync.model.BlazeAndroidSyncData) Module(com.intellij.openapi.module.Module) AndroidResourceModule(com.google.idea.blaze.android.sync.model.AndroidResourceModule) AndroidIdeInfo(com.google.idea.blaze.base.ideinfo.AndroidIdeInfo)

Example 44 with BlazeProjectData

use of com.google.idea.blaze.base.model.BlazeProjectData in project intellij by bazelbuild.

the class CPrefetchFileSourceTest method testSourceFilesInProjectIgnored.

@Test
public void testSourceFilesInProjectIgnored() {
    ProjectViewSet projectViewSet = parseProjectView("directories:", "  java/com/google", "targets:", "  //java/com/google:lib", "additional_languages:", "  c", "android_sdk_platform: android-25");
    BlazeProjectData projectData = MockBlazeProjectDataBuilder.builder(workspaceRoot).setTargetMap(TargetMapBuilder.builder().addTarget(TargetIdeInfo.builder().setBuildFile(sourceRoot("java/com/google/BUILD")).setLabel("//java/com/google:lib").setKind("cc_library").addSource(sourceRoot("java/com/google/native.cc")).addSource(sourceRoot("java/com/google/native.h"))).build()).setWorkspaceLanguageSettings(LanguageSupport.createWorkspaceLanguageSettings(projectViewSet)).build();
    Set<File> filesToPrefetch = new HashSet<>();
    new CPrefetchFileSource().addFilesToPrefetch(getProject(), projectViewSet, getImportRoots(projectViewSet), projectData, filesToPrefetch);
    assertThat(filesToPrefetch).isEmpty();
}
Also used : ProjectViewSet(com.google.idea.blaze.base.projectview.ProjectViewSet) CPrefetchFileSource(com.google.idea.blaze.cpp.CPrefetchFileSource) BlazeProjectData(com.google.idea.blaze.base.model.BlazeProjectData) File(java.io.File) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 45 with BlazeProjectData

use of com.google.idea.blaze.base.model.BlazeProjectData in project intellij by bazelbuild.

the class CPrefetchFileSourceTest method testCppHeaderFilesOutsideProjectIncluded.

@Test
public void testCppHeaderFilesOutsideProjectIncluded() {
    ProjectViewSet projectViewSet = parseProjectView("directories:", "  java/com/google", "targets:", "  //java/com/google:lib", "additional_languages:", "  c", "android_sdk_platform: android-25");
    BlazeProjectData projectData = MockBlazeProjectDataBuilder.builder(workspaceRoot).setTargetMap(TargetMapBuilder.builder().addTarget(TargetIdeInfo.builder().setBuildFile(sourceRoot("third_party/library/BUILD")).setLabel("//third_party/library:dep").setKind("cc_library").setCInfo(CIdeInfo.builder().addSource(sourceRoot("third_party/library/main.cc")).addHeader(sourceRoot("third_party/library/dep.h")).addHeader(sourceRoot("third_party/library/other.h")).addTextualHeader(sourceRoot("third_party/library/textual.h")))).build()).setWorkspaceLanguageSettings(LanguageSupport.createWorkspaceLanguageSettings(projectViewSet)).build();
    Set<File> filesToPrefetch = new HashSet<>();
    new CPrefetchFileSource().addFilesToPrefetch(getProject(), projectViewSet, getImportRoots(projectViewSet), projectData, filesToPrefetch);
    assertThat(filesToPrefetch).containsExactly(workspaceFile("third_party/library/dep.h"), workspaceFile("third_party/library/other.h"), workspaceFile("third_party/library/textual.h"));
}
Also used : ProjectViewSet(com.google.idea.blaze.base.projectview.ProjectViewSet) CPrefetchFileSource(com.google.idea.blaze.cpp.CPrefetchFileSource) BlazeProjectData(com.google.idea.blaze.base.model.BlazeProjectData) File(java.io.File) HashSet(java.util.HashSet) Test(org.junit.Test)

Aggregations

BlazeProjectData (com.google.idea.blaze.base.model.BlazeProjectData)82 File (java.io.File)31 TargetMap (com.google.idea.blaze.base.ideinfo.TargetMap)28 Nullable (javax.annotation.Nullable)24 WorkspacePath (com.google.idea.blaze.base.model.primitives.WorkspacePath)23 Test (org.junit.Test)22 VirtualFile (com.intellij.openapi.vfs.VirtualFile)19 TargetIdeInfo (com.google.idea.blaze.base.ideinfo.TargetIdeInfo)17 ProjectViewSet (com.google.idea.blaze.base.projectview.ProjectViewSet)17 MockBlazeProjectDataManager (com.google.idea.blaze.base.model.MockBlazeProjectDataManager)15 BlazeSyncParams (com.google.idea.blaze.base.sync.BlazeSyncParams)13 WorkspaceLanguageSettings (com.google.idea.blaze.base.sync.projectview.WorkspaceLanguageSettings)13 ArtifactLocationDecoder (com.google.idea.blaze.base.sync.workspace.ArtifactLocationDecoder)13 Project (com.intellij.openapi.project.Project)13 TargetKey (com.google.idea.blaze.base.ideinfo.TargetKey)11 ImmutableList (com.google.common.collect.ImmutableList)10 BlazeContext (com.google.idea.blaze.base.scope.BlazeContext)10 ArtifactLocation (com.google.idea.blaze.base.ideinfo.ArtifactLocation)8 List (java.util.List)8 BlazeProjectDataManager (com.google.idea.blaze.base.sync.data.BlazeProjectDataManager)7