Search in sources :

Example 11 with IdeaModule

use of org.gradle.plugins.ide.idea.model.IdeaModule in project gradle by gradle.

the class IdeaPlugin method visitAllImlArtifactsInComposite.

private void visitAllImlArtifactsInComposite(ProjectInternal project, IdeaProject ideaProject, TaskDependencyResolveContext context) {
    ProjectComponentIdentifier thisProjectId = projectPathRegistry.stateFor(project).getComponentIdentifier();
    for (IdeArtifactRegistry.Reference<IdeaModuleMetadata> reference : artifactRegistry.getIdeProjects(IdeaModuleMetadata.class)) {
        BuildIdentifier otherBuildId = reference.getOwningProject().getBuild();
        if (thisProjectId.getBuild().equals(otherBuildId)) {
            // IDEA Module for project in current build: don't include any module that has been excluded from project
            boolean found = false;
            for (IdeaModule ideaModule : ideaProject.getModules()) {
                if (reference.get().getFile().equals(ideaModule.getOutputFile())) {
                    found = true;
                    break;
                }
            }
            if (!found) {
                continue;
            }
        }
        reference.visitDependencies(context);
    }
}
Also used : IdeaModule(org.gradle.plugins.ide.idea.model.IdeaModule) IdeaModuleMetadata(org.gradle.plugins.ide.idea.internal.IdeaModuleMetadata) IdeArtifactRegistry(org.gradle.plugins.ide.internal.IdeArtifactRegistry) BuildIdentifier(org.gradle.api.artifacts.component.BuildIdentifier) ProjectComponentIdentifier(org.gradle.api.artifacts.component.ProjectComponentIdentifier)

Example 12 with IdeaModule

use of org.gradle.plugins.ide.idea.model.IdeaModule in project gradle by gradle.

the class IdeaScalaConfigurer method resolveScalaCompilerLibraries.

private static Map<String, ProjectLibrary> resolveScalaCompilerLibraries(Collection<Project> scalaProjects, final boolean useScalaSdk) {
    Map<String, ProjectLibrary> scalaCompilerLibraries = Maps.newLinkedHashMap();
    for (final Project scalaProject : scalaProjects) {
        final IdeaModule ideaModule = scalaProject.getExtensions().getByType(IdeaModel.class).getModule();
        final Iterable<File> files = getIdeaModuleLibraryDependenciesAsFiles(ideaModule);
        ProjectLibrary library = ((ProjectInternal) scalaProject).getOwner().fromMutableState(p -> createScalaSdkLibrary(scalaProject, files, useScalaSdk, ideaModule));
        if (library != null) {
            ProjectLibrary duplicate = Iterables.find(scalaCompilerLibraries.values(), Predicates.equalTo(library), null);
            scalaCompilerLibraries.put(scalaProject.getPath(), duplicate == null ? library : duplicate);
        }
    }
    return scalaCompilerLibraries;
}
Also used : Project(org.gradle.api.Project) IdeaModule(org.gradle.plugins.ide.idea.model.IdeaModule) IdeaModel(org.gradle.plugins.ide.idea.model.IdeaModel) ProjectLibrary(org.gradle.plugins.ide.idea.model.ProjectLibrary) File(java.io.File)

Example 13 with IdeaModule

use of org.gradle.plugins.ide.idea.model.IdeaModule in project curiostack by curioswitch.

the class CuriostackRootPlugin method setupJavaProject.

private static void setupJavaProject(Project project, Map<String, CheckSeverity> errorProneChecks) {
    setupRepositories(project);
    PluginContainer plugins = project.getPlugins();
    plugins.apply(ErrorPronePlugin.class);
    plugins.apply(IdeaPlugin.class);
    plugins.apply(NullAwayPlugin.class);
    plugins.apply(VersionsPlugin.class);
    var java = project.getExtensions().getByType(JavaPluginExtension.class);
    java.withJavadocJar();
    java.withSourcesJar();
    // Manage all dependencies by adding the bom as a platform.
    Object bomDependency = isCuriostack(project) ? project.getDependencies().project(ImmutableMap.of("path", ":tools:curiostack-bom")) : "org.curioswitch.curiostack:curiostack-bom:" + ToolDependencies.getBomVersion(project);
    var platformDependency = project.getDependencies().platform(bomDependency);
    // Needs to be in afterEvaluate since there is no way to guarantee isCanBeResolved, etc
    // are set otherwise.
    project.getConfigurations().configureEach(configuration -> {
        if (configuration instanceof DeprecatableConfiguration) {
            if (((DeprecatableConfiguration) configuration).getDeclarationAlternatives() != null) {
                return;
            }
        }
        if (!configuration.getName().endsWith("Classpath") && !UNMANAGED_CONFIGURATIONS.contains(configuration.getName())) {
            project.getDependencies().add(configuration.getName(), platformDependency);
        }
    });
    project.afterEvaluate(unused -> {
        plugins.withType(MavenPublishPlugin.class, unused2 -> {
            var publishing = project.getExtensions().getByType(PublishingExtension.class);
            publishing.getPublications().configureEach(publication -> {
                if (!(publication instanceof MavenPublication)) {
                    return;
                }
                var mavenPublication = (MavenPublication) publication;
                mavenPublication.versionMapping(mapping -> mapping.allVariants(VariantVersionMappingStrategy::fromResolutionResult));
                mavenPublication.getPom().withXml(xml -> {
                    var root = xml.asNode();
                    findChild(root, "dependencyManagement").ifPresent(root::remove);
                });
            });
        });
    });
    project.getTasks().withType(JavaCompile.class).configureEach(task -> {
        task.getOptions().setIncremental(true);
        ErrorProneOptions errorProne = ((ExtensionAware) task.getOptions()).getExtensions().findByType(ErrorProneOptions.class);
        if (errorProne != null) {
            errorProne.getDisableWarningsInGeneratedCode().set(true);
            errorProne.getIgnoreUnknownCheckNames().set(true);
            errorProne.getExcludedPaths().set("(.*/build/.*|.*/gen-src/.*)");
            errorProne.getChecks().set(errorProneChecks);
            var nullaway = ((ExtensionAware) errorProne).getExtensions().getByType(NullAwayOptions.class);
            nullaway.getSeverity().set(WARN);
            nullaway.getExcludedFieldAnnotations().addAll(MonotonicNonNull.class.getCanonicalName(), "org.mockito.Mock");
        }
    });
    JavaPluginConvention javaPlugin = project.getConvention().getPlugin(JavaPluginConvention.class);
    javaPlugin.setSourceCompatibility(JavaVersion.VERSION_16);
    javaPlugin.setTargetCompatibility(JavaVersion.VERSION_16);
    // Even for libraries that set source version to 8/11 for compatibility with older runtimes,
    // we always use 15 for tests.
    var testSourceSet = javaPlugin.getSourceSets().getByName(SourceSet.TEST_SOURCE_SET_NAME);
    project.getConfigurations().getByName(testSourceSet.getCompileClasspathConfigurationName()).getAttributes().attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 16);
    project.getConfigurations().getByName(testSourceSet.getRuntimeClasspathConfigurationName()).getAttributes().attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 16);
    project.getTasks().withType(Test.class).named("test").configure(test -> {
        if (project.getRootProject().hasProperty("updateSnapshots")) {
            test.jvmArgs(ImmutableList.of("-Dorg.curioswitch.testing.updateSnapshots=true"));
        }
        test.useJUnitPlatform(platform -> platform.includeEngines("junit-jupiter", "junit-vintage"));
        test.testLogging(logging -> {
            logging.setShowStandardStreams(true);
            logging.setExceptionFormat(TestExceptionFormat.FULL);
        });
    });
    // While Gradle attempts to generate a unique module name automatically,
    // it doesn't seem to always work properly, so we just always use unique
    // module names.
    project.getPlugins().withType(IdeaPlugin.class, plugin -> {
        IdeaModule module = plugin.getModel().getModule();
        String moduleName = project.getName();
        Project ancestor = project.getParent();
        while (ancestor != null && ancestor != project.getRootProject()) {
            moduleName = ancestor.getName() + "-" + moduleName;
            ancestor = ancestor.getParent();
        }
        module.setName(moduleName);
        project.getTasks().named("cleanIdea").configure(t -> t.doLast(unused -> project.file(project.getName() + ".iml").delete()));
    });
    // Pretty much all java code needs at least the Generated annotation.
    project.getDependencies().add(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, "jakarta.annotation:jakarta.annotation-api");
    project.getDependencies().add(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, "org.checkerframework:checker-qual");
    project.getDependencies().add(ErrorPronePlugin.CONFIGURATION_NAME, "com.google.errorprone:error_prone_core");
    project.getDependencies().add(ErrorPronePlugin.CONFIGURATION_NAME, "com.uber.nullaway:nullaway");
    project.getDependencies().add(ErrorPronePlugin.CONFIGURATION_NAME, "com.google.auto.value:auto-value-annotations");
    project.afterEvaluate(CuriostackRootPlugin::addStandardJavaTestDependencies);
    project.getConfigurations().all(configuration -> {
        configuration.resolutionStrategy(ResolutionStrategy::preferProjectModules);
        configuration.exclude(ImmutableMap.of("group", "com.google.guava", "module", "guava-jdk5"));
    });
    var javadoc = project.getTasks().withType(Javadoc.class).named("javadoc");
    javadoc.configure(t -> {
        CoreJavadocOptions options = (CoreJavadocOptions) t.getOptions();
        options.quiet();
        options.addBooleanOption("Xdoclint:all,-missing", true);
    });
    project.getTasks().register("resolveDependencies", resolveDependencies -> resolveDependencies.doLast(unused -> {
        project.getConfigurations().all(configuration -> {
            if (configuration.isCanBeResolved()) {
                configuration.resolve();
            }
        });
    }));
    project.getPlugins().withType(JMHPlugin.class, unused -> {
        JMHPluginExtension jmh = project.getExtensions().getByType(JMHPluginExtension.class);
        // Benchmarks are usually very small and converge quickly. If this stops being the
        // case
        // these numbers can be adjusted.
        jmh.setFork(2);
        jmh.setIterations(5);
        jmh.setProfilers(ImmutableList.of("hs_comp"));
        jmh.setJmhVersion("1.19");
        Object jmhRegex = project.getRootProject().findProperty("jmhRegex");
        if (jmhRegex != null) {
            jmh.setInclude((String) jmhRegex);
        }
    });
    project.getPlugins().withType(JooqPlugin.class, unused -> project.getTasks().withType(JooqTask.class).configureEach(t -> {
        for (String dependency : ImmutableList.of("javax.activation:activation", "mysql:mysql-connector-java", // Not sure why this isn't automatically added.
        "com.google.guava:guava", "com.google.cloud.sql:mysql-socket-factory")) {
            project.getDependencies().add("jooqRuntime", dependency);
        }
    }));
    // It is very common to want to pass in command line system properties to the binary, so just
    // always forward properties. It won't affect production since no one runs binaries via Gradle
    // in production.
    project.getTasks().withType(JavaExec.class).configureEach(task -> System.getProperties().entrySet().stream().filter(entry -> !((String) entry.getKey()).startsWith("java.")).forEach(entry -> task.systemProperty((String) entry.getKey(), entry.getValue())));
}
Also used : ErrorProneOptions(net.ltgt.gradle.errorprone.ErrorProneOptions) AwsSetupPlugin(org.curioswitch.gradle.plugins.aws.AwsSetupPlugin) MavenPublishPlugin(org.gradle.api.publish.maven.plugins.MavenPublishPlugin) CondaPlugin(org.curioswitch.gradle.conda.CondaPlugin) JavaPlugin(org.gradle.api.plugins.JavaPlugin) IdeaPlugin(org.gradle.plugins.ide.idea.IdeaPlugin) MonotonicNonNull(org.checkerframework.checker.nullness.qual.MonotonicNonNull) NodePlugin(org.curioswitch.gradle.plugins.nodejs.NodePlugin) Wrapper(org.gradle.api.tasks.wrapper.Wrapper) PublishingExtension(org.gradle.api.publish.PublishingExtension) Javadoc(org.gradle.api.tasks.javadoc.Javadoc) JibTask(org.curioswitch.gradle.golang.tasks.JibTask) GolangPlugin(org.curioswitch.gradle.golang.GolangPlugin) Locale(java.util.Locale) Map(java.util.Map) ExtensionAware(org.gradle.api.plugins.ExtensionAware) TestExceptionFormat(org.gradle.api.tasks.testing.logging.TestExceptionFormat) IdeaModule(org.gradle.plugins.ide.idea.model.IdeaModule) ImmutableSet(com.google.common.collect.ImmutableSet) ImmutableMap(com.google.common.collect.ImmutableMap) ReleasePlugin(org.curioswitch.gradle.release.ReleasePlugin) Project(org.gradle.api.Project) VariantVersionMappingStrategy(org.gradle.api.publish.VariantVersionMappingStrategy) Predicate(java.util.function.Predicate) CheckSeverity(net.ltgt.gradle.errorprone.CheckSeverity) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) SetupGitHooks(org.curioswitch.gradle.plugins.curiostack.tasks.SetupGitHooks) DistributionType(org.gradle.api.tasks.wrapper.Wrapper.DistributionType) Set(java.util.Set) UpdateProjectSettingsTask(org.curioswitch.gradle.plugins.curiostack.tasks.UpdateProjectSettingsTask) SpotlessExtension(com.diffplug.gradle.spotless.SpotlessExtension) XmlParser(groovy.util.XmlParser) Collectors(java.util.stream.Collectors) JavaVersion(org.gradle.api.JavaVersion) StandardCharsets(java.nio.charset.StandardCharsets) NullAwayPlugin(net.ltgt.gradle.nullaway.NullAwayPlugin) UncheckedIOException(java.io.UncheckedIOException) CondaBuildEnvPlugin(org.curioswitch.gradle.conda.CondaBuildEnvPlugin) List(java.util.List) ToolDownloaderPlugin(org.curioswitch.gradle.tooldownloader.ToolDownloaderPlugin) CoreJavadocOptions(org.gradle.external.javadoc.CoreJavadocOptions) VersionsPlugin(com.github.benmanes.gradle.versions.VersionsPlugin) JavaPluginExtension(org.gradle.api.plugins.JavaPluginExtension) SAXException(org.xml.sax.SAXException) DependencyUpdatesTask(com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask) Optional(java.util.Optional) PluginContainer(org.gradle.api.plugins.PluginContainer) XmlProvider(org.gradle.api.XmlProvider) Pattern(java.util.regex.Pattern) JooqPlugin(nu.studer.gradle.jooq.JooqPlugin) QName(groovy.xml.QName) GenerateApiServerTask(org.curioswitch.gradle.plugins.curiostack.tasks.GenerateApiServerTask) DeprecatableConfiguration(org.gradle.internal.deprecation.DeprecatableConfiguration) ERROR(net.ltgt.gradle.errorprone.CheckSeverity.ERROR) CurioGenericCiPlugin(org.curioswitch.gradle.plugins.ci.CurioGenericCiPlugin) ErrorPronePlugin(net.ltgt.gradle.errorprone.ErrorPronePlugin) CondaExtension(org.curioswitch.gradle.conda.CondaExtension) HashMap(java.util.HashMap) GolangExtension(org.curioswitch.gradle.golang.GolangExtension) BasePlugin(org.gradle.api.plugins.BasePlugin) MavenPublication(org.gradle.api.publish.maven.MavenPublication) DownloadToolUtil(org.curioswitch.gradle.tooldownloader.util.DownloadToolUtil) SourceSet(org.gradle.api.tasks.SourceSet) Configuration(org.gradle.api.artifacts.Configuration) TargetJvmVersion(org.gradle.api.attributes.java.TargetJvmVersion) JMHPluginExtension(me.champeau.gradle.JMHPluginExtension) ImmutableList(com.google.common.collect.ImmutableList) DependencyHandler(org.gradle.api.artifacts.dsl.DependencyHandler) JooqTask(nu.studer.gradle.jooq.JooqTask) DownloadedToolManager(org.curioswitch.gradle.tooldownloader.DownloadedToolManager) UpdateGradleWrapperTask(org.curioswitch.gradle.plugins.curiostack.tasks.UpdateGradleWrapperTask) CreateShellConfigTask(org.curioswitch.gradle.plugins.curiostack.tasks.CreateShellConfigTask) NodeUtil(org.curioswitch.gradle.plugins.nodejs.util.NodeUtil) Test(org.gradle.api.tasks.testing.Test) OFF(net.ltgt.gradle.errorprone.CheckSeverity.OFF) JavaCompile(org.gradle.api.tasks.compile.JavaCompile) Resources(com.google.common.io.Resources) Files(java.nio.file.Files) JavaPluginConvention(org.gradle.api.plugins.JavaPluginConvention) JacocoPlugin(org.gradle.testing.jacoco.plugins.JacocoPlugin) JMHPlugin(me.champeau.gradle.JMHPlugin) UpdateIntelliJSdksTask(org.curioswitch.gradle.plugins.curiostack.tasks.UpdateIntelliJSdksTask) IOException(java.io.IOException) Node(groovy.util.Node) GcloudPlugin(org.curioswitch.gradle.plugins.gcloud.GcloudPlugin) GolangSetupPlugin(org.curioswitch.gradle.golang.GolangSetupPlugin) SpotlessPlugin(com.diffplug.gradle.spotless.SpotlessPlugin) ResolutionStrategy(org.gradle.api.artifacts.ResolutionStrategy) TerraformSetupPlugin(org.curioswitch.gradle.plugins.terraform.TerraformSetupPlugin) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) NullAwayOptions(net.ltgt.gradle.nullaway.NullAwayOptions) JavaExec(org.gradle.api.tasks.JavaExec) WARN(net.ltgt.gradle.errorprone.CheckSeverity.WARN) Plugin(org.gradle.api.Plugin) Copy(org.gradle.api.tasks.Copy) PluginContainer(org.gradle.api.plugins.PluginContainer) ErrorProneOptions(net.ltgt.gradle.errorprone.ErrorProneOptions) MavenPublication(org.gradle.api.publish.maven.MavenPublication) Javadoc(org.gradle.api.tasks.javadoc.Javadoc) DeprecatableConfiguration(org.gradle.internal.deprecation.DeprecatableConfiguration) ResolutionStrategy(org.gradle.api.artifacts.ResolutionStrategy) Project(org.gradle.api.Project) CoreJavadocOptions(org.gradle.external.javadoc.CoreJavadocOptions) IdeaModule(org.gradle.plugins.ide.idea.model.IdeaModule) JavaPluginConvention(org.gradle.api.plugins.JavaPluginConvention) JavaExec(org.gradle.api.tasks.JavaExec) MonotonicNonNull(org.checkerframework.checker.nullness.qual.MonotonicNonNull) JMHPluginExtension(me.champeau.gradle.JMHPluginExtension) JavaCompile(org.gradle.api.tasks.compile.JavaCompile)

Example 14 with IdeaModule

use of org.gradle.plugins.ide.idea.model.IdeaModule in project rest.li by linkedin.

the class PegasusPlugin method addGeneratedDir.

private static void addGeneratedDir(Project project, SourceSet sourceSet, Collection<Configuration> configurations) {
    project.getPlugins().withType(IdeaPlugin.class, ideaPlugin -> {
        IdeaModule ideaModule = ideaPlugin.getModel().getModule();
        // stupid if block needed because of stupid assignment required to update source dirs
        if (isTestSourceSet(sourceSet)) {
            Set<File> sourceDirs = ideaModule.getTestSourceDirs();
            sourceDirs.addAll(sourceSet.getJava().getSrcDirs());
            // this is stupid but assignment is required
            ideaModule.setTestSourceDirs(sourceDirs);
            if (debug) {
                System.out.println("Added " + sourceSet.getJava().getSrcDirs() + " to IdeaModule testSourceDirs " + ideaModule.getTestSourceDirs());
            }
        } else {
            Set<File> sourceDirs = ideaModule.getSourceDirs();
            sourceDirs.addAll(sourceSet.getJava().getSrcDirs());
            // this is stupid but assignment is required
            ideaModule.setSourceDirs(sourceDirs);
            if (debug) {
                System.out.println("Added " + sourceSet.getJava().getSrcDirs() + " to  IdeaModule sourceDirs " + ideaModule.getSourceDirs());
            }
        }
        Collection<Configuration> compilePlus = ideaModule.getScopes().get("COMPILE").get("plus");
        compilePlus.addAll(configurations);
        ideaModule.getScopes().get("COMPILE").put("plus", compilePlus);
    });
}
Also used : IdeaModule(org.gradle.plugins.ide.idea.model.IdeaModule) Configuration(org.gradle.api.artifacts.Configuration) File(java.io.File)

Aggregations

IdeaModule (org.gradle.plugins.ide.idea.model.IdeaModule)14 File (java.io.File)9 Project (org.gradle.api.Project)6 Set (java.util.Set)5 JavaVersion (org.gradle.api.JavaVersion)5 List (java.util.List)4 Configuration (org.gradle.api.artifacts.Configuration)4 ConventionMapping (org.gradle.api.internal.ConventionMapping)4 ImmutableMap (com.google.common.collect.ImmutableMap)3 SpotlessExtension (com.diffplug.gradle.spotless.SpotlessExtension)2 SpotlessPlugin (com.diffplug.gradle.spotless.SpotlessPlugin)2 VersionsPlugin (com.github.benmanes.gradle.versions.VersionsPlugin)2 ImmutableList (com.google.common.collect.ImmutableList)2 ImmutableList.toImmutableList (com.google.common.collect.ImmutableList.toImmutableList)2 Resources (com.google.common.io.Resources)2 Node (groovy.util.Node)2 Map (java.util.Map)2 IConventionAware (org.gradle.api.internal.IConventionAware)2 DslObject (org.gradle.api.internal.plugins.DslObject)2 SourceSet (org.gradle.api.tasks.SourceSet)2