From 10f904655d7a79779bdfa8b789c6782dd3a14012 Mon Sep 17 00:00:00 2001 From: Laszlo Kishalmi Date: Sat, 27 Dec 2025 13:05:16 -0800 Subject: [PATCH] Upgraded Gradle Tooling API to 9.3.0-rc-2 Upgraded Micronaut Gradle Test Projects Fix some Gradle project loading internals Fix gradle.java tests. Fix gradle.dependencies tests Fix micronaut tests Gradle test can work with Java 25 from now Moving to the final Gradle 9.3.0 Release Remove static final from BuildPropertiesSupport.Property as it became a record Ignore WeirdMultiProject Test. --- .github/workflows/main.yml | 18 ++-- .../gradle/artifacts/multi/app/build.gradle | 16 ++-- .../gradle/artifacts/multi/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/artifacts/multi/oci/build.gradle | 17 ++-- .../gradle/artifacts/multi/settings.gradle | 1 - .../data/gradle/artifacts/simple/build.gradle | 17 ++-- .../gradle/artifacts/simple/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../gradle/artifacts/simple/micronaut-cli.yml | 6 -- ...tExpressionLanguageCompletionTestBase.java | 2 +- .../MicronautGradleArtifactsImplTest.java | 3 +- extide/gradle/nbproject/project.xml | 4 +- .../gradle/tooling/NbProjectInfoBuilder.java | 7 +- .../modules/gradle/GradleProject.java | 6 ++ .../modules/gradle/NbGradleProjectImpl.java | 89 +++++-------------- .../gradle/api/BuildPropertiesSupport.java | 17 +--- .../execute/ConfigurableActionProvider.java | 5 +- .../loaders/ExtensionPropertiesExtractor.java | 9 +- .../loaders/GradleProjectLoaderImpl.java | 2 +- .../gradle/loaders/LegacyProjectLoader.java | 23 ++--- .../data/buildprops/micronaut/build.gradle | 4 +- .../buildprops/micronaut/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../projects/externaldeps/p1/build.gradle | 9 +- .../projects/externaldeps/p2/build.gradle | 9 +- .../unit/data/projects/multi/p1/build.gradle | 10 ++- .../unit/data/projects/multi/p2/build.gradle | 9 +- .../projects/priming/broken1/build.gradle | 10 ++- .../priming/broken1/gradle.properties | 2 +- .../unit/data/projects/simple/build.gradle | 9 +- ...AbstractGradleProjectTemplateTestCase.java | 40 +++++---- .../gradle/AbstractGradleProjectTestCase.java | 1 - .../ExtensionPropertiesExtractorTest.java | 12 ++- .../VerifyProjectTemplatesTest.java | 47 ++++++++++ .../queries/ProjectContainerProviderTest.java | 3 + extide/libs.gradle/external/binaries-list | 2 +- ...t => gradle-tooling-api-9.3.0-license.txt} | 4 +- ...xt => gradle-tooling-api-9.3.0-notice.txt} | 4 +- extide/libs.gradle/manifest.mf | 4 +- .../libs.gradle/nbproject/project.properties | 4 +- extide/libs.gradle/nbproject/project.xml | 2 +- .../unit/data/projects/micronaut/build.gradle | 20 +++-- .../data/projects/micronaut/build2.gradle | 21 +++-- .../data/projects/micronaut/build3.gradle | 12 +-- .../data/projects/micronaut/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../data/projects/multi/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../unit/data/projects/multi/oci/build.gradle | 17 ++-- .../unit/data/projects/multi/settings.gradle | 1 - .../DependencyModifierImplTest.java | 24 ++--- java/gradle.java/nbproject/project.xml | 7 +- .../unit/data/artifacts/shadowed/build.gradle | 6 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../data/artifacts/withTests/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../data/dependencies/micronaut/build.gradle | 22 ++--- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../VerifyGradleProjectTemplatesTest.java | 41 +++++++++ .../GradleDependenciesImplementationTest.java | 75 ++++------------ java/gradle.test/nbproject/project.xml | 4 +- 62 files changed, 368 insertions(+), 341 deletions(-) delete mode 100644 enterprise/micronaut/test/unit/data/gradle/artifacts/simple/micronaut-cli.yml rename java/gradle.java/test/unit/src/org/netbeans/modules/gradle/VerifyGradleProjectTemplatesTest.java => extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTemplateTestCase.java (87%) create mode 100644 extide/gradle/test/unit/src/org/netbeans/modules/gradle/newproject/VerifyProjectTemplatesTest.java rename extide/libs.gradle/external/{gradle-tooling-api-8.14-license.txt => gradle-tooling-api-9.3.0-license.txt} (99%) rename extide/libs.gradle/external/{gradle-tooling-api-8.14-notice.txt => gradle-tooling-api-9.3.0-notice.txt} (73%) create mode 100644 java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/newproject/VerifyGradleProjectTemplatesTest.java diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 768bfb2dd5f6..1a1c7526a736 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -846,7 +846,7 @@ jobs: timeout-minutes: 50 strategy: matrix: - java: [ '17', '21', '26-ea' ] + java: [ '17', '21', '25', '26-ea' ] exclude: - java: ${{ github.event_name == 'pull_request' && 'nothing' || '21' }} fail-fast: false @@ -931,23 +931,23 @@ jobs: - name: java/gradle.test run: ant $OPTS -f java/gradle.test test - # TODO next are JDK 21 or 25 incompatibe steps - - name: java/java.mx.project - if: ${{ matrix.java == '17' || matrix.java == '21' }} - run: .github/retry.sh ant $OPTS -f java/java.mx.project test - - name: java/gradle.java - if: ${{ matrix.java == '17' || matrix.java == '21' }} + if: ${{ matrix.java == '17' || matrix.java == '21' || matrix.java == '25' }} run: .github/retry.sh ant $OPTS -f java/gradle.java test - name: extide/gradle - if: ${{ matrix.java == '17' || matrix.java == '21' }} + if: ${{ matrix.java == '17' || matrix.java == '21' || matrix.java == '25' }} run: ant $OPTS -f extide/gradle test - name: java/gradle.dependencies - if: ${{ matrix.java == '17' }} + if: ${{ matrix.java == '17' || matrix.java == '21' || matrix.java == '25' }} run: ant $OPTS -f java/gradle.dependencies test + # TODO next are JDK 21 or 25 incompatibe steps + - name: java/java.mx.project + if: ${{ matrix.java == '17' || matrix.java == '21' }} + run: .github/retry.sh ant $OPTS -f java/java.mx.project test + - name: extide/o.apache.tools.ant.module if: ${{ matrix.java == '17' }} run: ant $OPTS -f extide/o.apache.tools.ant.module test diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/app/build.gradle b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/app/build.gradle index 8edae9fdc113..26b2cd98af6b 100644 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/app/build.gradle +++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/app/build.gradle @@ -1,6 +1,5 @@ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" - id("io.micronaut.application") version "3.7.10" + id("io.micronaut.application") version "4.6.1" } version = "0.1" @@ -12,21 +11,22 @@ repositories { dependencies { annotationProcessor("io.micronaut:micronaut-http-validation") - implementation("io.micronaut:micronaut-http-client") - implementation("io.micronaut:micronaut-jackson-databind") + implementation("io.micronaut:micronaut-http-client-jdk") + implementation("io.micronaut.serde:micronaut-serde-jackson") implementation("jakarta.annotation:jakarta.annotation-api") runtimeOnly("ch.qos.logback:logback-classic") - implementation("io.micronaut:micronaut-validation") + implementation("io.micronaut.validation:micronaut-validation") } - application { mainClass.set("com.example.Application") } + java { - sourceCompatibility = JavaVersion.toVersion("11") - targetCompatibility = JavaVersion.toVersion("11") + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } graalvmNative.toolchainDetection = false diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle.properties b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle.properties index 770867193879..2fb740b2ecb4 100644 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle.properties +++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle.properties @@ -1 +1 @@ -micronautVersion=3.10.2 +micronautVersion=4.9.4 diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle/wrapper/gradle-wrapper.properties b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle/wrapper/gradle-wrapper.properties index 98debb84d51d..ac57dd155af0 100644 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle/wrapper/gradle-wrapper.properties +++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/oci/build.gradle b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/oci/build.gradle index ef7b070ca405..92391ce5abcb 100644 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/oci/build.gradle +++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/oci/build.gradle @@ -1,6 +1,5 @@ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" - id("io.micronaut.application") version "3.7.10" + id("io.micronaut.application") version "4.6.1" } version = "0.1" @@ -12,12 +11,12 @@ repositories { dependencies { annotationProcessor("io.micronaut:micronaut-http-validation") - implementation("io.micronaut:micronaut-http-client") - implementation("io.micronaut:micronaut-jackson-databind") + implementation("io.micronaut:micronaut-http-client-jdk") + implementation("io.micronaut.serde:micronaut-serde-jackson") implementation("jakarta.annotation:jakarta.annotation-api") runtimeOnly("ch.qos.logback:logback-classic") implementation(project(":app")) - implementation("io.micronaut:micronaut-validation") + implementation("io.micronaut.validation:micronaut-validation") } @@ -25,13 +24,15 @@ dependencies { application { mainClass.set("com.example.Application") } + java { - sourceCompatibility = JavaVersion.toVersion("11") - targetCompatibility = JavaVersion.toVersion("11") + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } task testJar(type: Jar) { - classifier = 'tests' + archiveClassifier = 'tests' from sourceSets.test.output } diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/settings.gradle b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/settings.gradle index e6db119b5346..7f0ef99f2726 100644 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/settings.gradle +++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/multi/settings.gradle @@ -2,5 +2,4 @@ rootProject.name="demo" include("app") -include("aws") include("oci") diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/build.gradle b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/build.gradle index ad17aa4ce023..8866d614f346 100644 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/build.gradle +++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/build.gradle @@ -1,6 +1,5 @@ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" - id("io.micronaut.application") version "3.7.10" + id("io.micronaut.application") version "4.6.1" } version = "0.1" @@ -12,16 +11,15 @@ repositories { dependencies { annotationProcessor("info.picocli:picocli-codegen") - implementation("info.picocli:picocli") - implementation("io.micronaut:micronaut-jackson-databind") + implementation("io.micronaut.serde:micronaut-serde-jackson") implementation("io.micronaut.picocli:micronaut-picocli") implementation("jakarta.annotation:jakarta.annotation-api") runtimeOnly("ch.qos.logback:logback-classic") - implementation("io.micronaut:micronaut-validation") + implementation("io.micronaut.validation:micronaut-validation") - testImplementation("io.micronaut:micronaut-http-client") + testImplementation("io.micronaut:micronaut-http-client-jdk") - implementation("org.apache.logging.log4j:log4j-core:2.15.0") + implementation("org.apache.logging.log4j:log4j-core:2.24.0") } @@ -29,8 +27,9 @@ application { mainClass.set("com.example.Demo2Command") } java { - sourceCompatibility = JavaVersion.toVersion("11") - targetCompatibility = JavaVersion.toVersion("11") + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } micronaut { diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle.properties b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle.properties index 35ac235ce073..2fb740b2ecb4 100644 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle.properties +++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle.properties @@ -1 +1 @@ -micronautVersion=3.10.1 +micronautVersion=4.9.4 diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle/wrapper/gradle-wrapper.properties b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle/wrapper/gradle-wrapper.properties index 98debb84d51d..23449a2b5432 100644 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle/wrapper/gradle-wrapper.properties +++ b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/micronaut-cli.yml b/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/micronaut-cli.yml deleted file mode 100644 index 77d70b5b0f3b..000000000000 --- a/enterprise/micronaut/test/unit/data/gradle/artifacts/simple/micronaut-cli.yml +++ /dev/null @@ -1,6 +0,0 @@ -applicationType: cli -defaultPackage: com.example -testFramework: junit -sourceLanguage: java -buildTool: gradle -features: [annotation-api, app-name, gradle, jackson-databind, java, junit, logback, micronaut-build, picocli, picocli-java-application, picocli-junit, readme, shade, yaml] diff --git a/enterprise/micronaut/test/unit/src/org/netbeans/modules/micronaut/completion/MicronautExpressionLanguageCompletionTestBase.java b/enterprise/micronaut/test/unit/src/org/netbeans/modules/micronaut/completion/MicronautExpressionLanguageCompletionTestBase.java index 4fe133fed5a3..0bbf34aecc66 100644 --- a/enterprise/micronaut/test/unit/src/org/netbeans/modules/micronaut/completion/MicronautExpressionLanguageCompletionTestBase.java +++ b/enterprise/micronaut/test/unit/src/org/netbeans/modules/micronaut/completion/MicronautExpressionLanguageCompletionTestBase.java @@ -66,7 +66,7 @@ protected void performTest(String text, int offset, String goldenFileName) throw assertNotNull(testSourceFO); DataObject testSourceDO = DataObject.find(testSourceFO); assertNotNull(testSourceDO); - EditorCookie ec = (EditorCookie) testSourceDO.getCookie(EditorCookie.class); + EditorCookie ec = testSourceDO.getCookie(EditorCookie.class); assertNotNull(ec); final Document doc = ec.openDocument(); assertNotNull(doc); diff --git a/enterprise/micronaut/test/unit/src/org/netbeans/modules/micronaut/gradle/MicronautGradleArtifactsImplTest.java b/enterprise/micronaut/test/unit/src/org/netbeans/modules/micronaut/gradle/MicronautGradleArtifactsImplTest.java index 81e634a04683..88ab2b7eacad 100644 --- a/enterprise/micronaut/test/unit/src/org/netbeans/modules/micronaut/gradle/MicronautGradleArtifactsImplTest.java +++ b/enterprise/micronaut/test/unit/src/org/netbeans/modules/micronaut/gradle/MicronautGradleArtifactsImplTest.java @@ -255,9 +255,8 @@ public void testSubprojectShadowOutput() throws Exception { assertNotNull(ar); assertEquals(1, ar.getArtifacts().size()); - ArtifactSpec spec = ar.getArtifacts().get(0); + ArtifactSpec spec = ar.getArtifacts().get(0); assertEquals("jar", spec.getType()); - assertEquals("all", spec.getClassifier()); } public void testNativeOutputInSubprojectNativeBuild() throws Exception { diff --git a/extide/gradle/nbproject/project.xml b/extide/gradle/nbproject/project.xml index b45d577942f0..d0180e80f712 100644 --- a/extide/gradle/nbproject/project.xml +++ b/extide/gradle/nbproject/project.xml @@ -99,8 +99,8 @@ org.netbeans.modules.libs.gradle - 8 - 8.7 + 9 + 9.3 diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java index 30d0e5e28fbb..9a4d3193ee87 100644 --- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java +++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java @@ -1375,7 +1375,12 @@ private void detectArtifacts(NbProjectInfoModel model) { } if (project.getPlugins().hasPlugin("war")) { model.getInfo().put("main_war", getProperty(project, "war", "archivePath")); - model.getInfo().put("webapp_dir", getProperty(project, "webAppDir")); + DirectoryProperty webAppDir = (DirectoryProperty)getProperty(project, "war", "webAppDirectory"); + if (webAppDir != null) { + model.getInfo().put("webapp_dir", webAppDir.getAsFile().get()); + } else { + model.getInfo().put("webapp_dir", getProperty(project, "webAppDir")); + } model.getInfo().put("webxml", getProperty(project, "war", "webXml")); try { model.getInfo().put("exploded_war_dir", getProperty(project, "explodedWar", "destinationDir")); diff --git a/extide/gradle/src/org/netbeans/modules/gradle/GradleProject.java b/extide/gradle/src/org/netbeans/modules/gradle/GradleProject.java index f12d5b998200..330874a7c6cd 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/GradleProject.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/GradleProject.java @@ -105,6 +105,12 @@ public String toString() { return "GradleProject{" + "quality=" + quality + ", baseProject=" + baseProject + '}'; } + public boolean betterThan(GradleProject prj) { + return prj == null + || quality.betterThan(prj.quality) + || ((quality == prj.quality) && getProblems().size() > prj.getProblems().size()); + + } /** * * @since 2.23 diff --git a/extide/gradle/src/org/netbeans/modules/gradle/NbGradleProjectImpl.java b/extide/gradle/src/org/netbeans/modules/gradle/NbGradleProjectImpl.java index 86abed1beea7..be8c8e31494e 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/NbGradleProjectImpl.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/NbGradleProjectImpl.java @@ -44,6 +44,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; import java.util.logging.Level; import org.netbeans.api.project.Project; import org.netbeans.spi.project.ProjectState; @@ -217,10 +218,7 @@ public void fireProjectReload(boolean wait) { void attachAllUpdater() { synchronized (this) { if (openedProjectUpdater == null) { - openedProjectUpdater = new Updater((new FileProvider() { - - @Override - public Set getFiles() { + openedProjectUpdater = new Updater(() -> { GradleFiles gf = getGradleFiles(); Set ret = new LinkedHashSet<>(); for (GradleFiles.Kind kind : GradleFiles.Kind.PROJECT_FILES) { @@ -230,8 +228,7 @@ public Set getFiles() { } } return ret; - } - })); + }); } } @@ -308,33 +305,6 @@ public GradleProject projectWithQuality(String desc, Quality aim, boolean intera } } - /** - * Obtains a project attempting at least the defined quality, without setting - * that quality level for subsequent loads. Note that the returned project's quality - * must be checked. If the currently loaded project declares the desired quality, - * no load is performed. - *

- * This method should be used in preference to {@link #loadProject()} or {@link #loadOWnProject}, - * unless it's desired to force refresh the project contents to the current disk state. - *

- * Implementation note: project reload events are dispatched synchronously - * in the calling thread. - *
- * @param desc optional description for the loading process, can be {@code null}. - * @param aim aimed quality - * @param interactive true, if user messages/confirmations can be displayed - * @param force to force load even though the quality does not change. - * @return project instance - */ - @Deprecated - public CompletableFuture projectWithQualityTask(String desc, Quality aim, boolean interactive, boolean force) { - return projectWithQualityTask(NbGradleProject.loadOptions(aim). - setDescription(desc). - setInteractive(interactive). - setForce(force) - ); - } - /** * Obtains a project attempting at least the defined quality, without setting * that quality level for subsequent loads. Note that the returned project's quality @@ -556,18 +526,8 @@ CompletableFuture loadOwnProject0(LoadOptions options, boolean sy loadedProjectSerial = s; this.attemptedQuality = options.getAim(); - boolean replace = project == null || options.isForce(); - if (project != null) { - if (prj.getQuality().betterThan(project.getQuality())) { - replace = true; - } else if ( - project.getQuality().equals(prj.getQuality()) && - !project.getProblems().equals(prj.getProblems()) && - !prj.getProblems().isEmpty()) { - // exception: if the new project is the same quality fallback, but contains (different) problem info, use it - replace = true; - } - } + boolean replace = prj.betterThan(project) || options.isForce(); + if (!replace) { // avoid replacing a project when nothing has changed. LOG.log(Level.FINER, "Current project {1} sufficient for attempted quality {0}", new Object[] { this.project, options.getAim() }); @@ -613,8 +573,6 @@ private CompletableFuture callAccessorReload(LoadingCF f, GradleP f.ownThreadCompletion.remove(); f.complete(prj); } - } catch (ThreadDeath t) { - throw t; } catch (RuntimeException | Error ex) { f.completeExceptionally(ex); throw ex; @@ -645,8 +603,8 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (obj instanceof Project) { - NbGradleProjectImpl impl = ((Project) obj).getLookup().lookup(NbGradleProjectImpl.class); + if (obj instanceof Project prj) { + NbGradleProjectImpl impl = prj.getLookup().lookup(NbGradleProjectImpl.class); if (impl != null) { return getGradleFiles().equals(impl.getGradleFiles()); } @@ -725,9 +683,6 @@ CompletableFuture primeProject() { } catch (Throwable t) { LOG.log(Level.FINER, t, () -> String.format("Priming errored for %s", project)); ret.completeExceptionally(t); - if (t instanceof ThreadDeath) { - throw t; - } } }); return ret; @@ -753,20 +708,21 @@ private class ProjectOpenedHookImpl extends ProjectOpenedHook { @Override protected void projectOpened() { - Runnable open = () -> { - setAimedQuality(FULL); - attachAllUpdater(); - if (ProjectProblems.isBroken(NbGradleProjectImpl.this)) { - ProjectProblems.showAlert(NbGradleProjectImpl.this); - } - }; if (GradleExperimentalSettings.getDefault().isOpenLazy()) { - RELOAD_RP.post(open, 100); + RELOAD_RP.post(this::open, 100); } else { - open.run(); + open(); } } + private void open() { + setAimedQuality(FULL); + attachAllUpdater(); + if (ProjectProblems.isBroken(NbGradleProjectImpl.this)) { + ProjectProblems.showAlert(NbGradleProjectImpl.this); + } + } + @Override protected void projectClosed() { setAimedQuality(Quality.FALLBACK); @@ -777,11 +733,6 @@ protected void projectClosed() { } } - interface FileProvider { - - Set getFiles(); - } - private class CacheDirProvider implements CacheDirectoryProvider { @Override @@ -902,11 +853,11 @@ public void propertyChange(PropertyChangeEvent evt) { private class Updater implements FileChangeListener { - final FileProvider fileProvider; + final Supplier> fileProvider; Set filesToWatch; long lastEventTime = 0; - Updater(FileProvider fp) { + Updater(Supplier> fp) { fileProvider = fp; } @@ -945,7 +896,7 @@ public void fileAttributeChanged(FileAttributeEvent fe) { } synchronized void attachAll() { - filesToWatch = fileProvider.getFiles(); + filesToWatch = fileProvider.get(); if (filesToWatch != null) { for (File f : filesToWatch) { if (f != null) { diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/BuildPropertiesSupport.java b/extide/gradle/src/org/netbeans/modules/gradle/api/BuildPropertiesSupport.java index 1f8590abf29c..e40e308e3e99 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/api/BuildPropertiesSupport.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/api/BuildPropertiesSupport.java @@ -255,22 +255,7 @@ public enum PropertyKind { /** * Describes a property and its value. */ - public static final class Property { - private final Object id; - private final String scope; - private final PropertyKind kind; - private final String type; - private final String value; - private final String name; - - public Property(Object id, String scope, String propertyName, PropertyKind kind, String type, String value) { - this.id = id; - this.scope = scope; - this.kind = kind; - this.type = type; - this.value = value; - this.name = propertyName; - } + public record Property(Object id, String scope, String name, PropertyKind kind, String type, String value) { /** * Returns the property id. The ID is a token that could be used to identify diff --git a/extide/gradle/src/org/netbeans/modules/gradle/execute/ConfigurableActionProvider.java b/extide/gradle/src/org/netbeans/modules/gradle/execute/ConfigurableActionProvider.java index 125c757fef22..29c551022782 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/execute/ConfigurableActionProvider.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/execute/ConfigurableActionProvider.java @@ -21,7 +21,6 @@ import java.util.List; import javax.swing.event.ChangeListener; -import org.gradle.internal.impldep.javax.annotation.Nullable; import org.netbeans.modules.gradle.api.execute.ActionMapping; import org.netbeans.modules.gradle.api.execute.GradleExecConfiguration; import org.netbeans.modules.gradle.spi.actions.ProjectActionMappingProvider; @@ -60,7 +59,7 @@ public interface ConfigurableActionProvider { * @param action the action name * @return the action mapping for the action or {@code null} if none found */ - ProjectActionMappingProvider findActionProvider(@Nullable String configurationId); + ProjectActionMappingProvider findActionProvider(String configurationId); /** * Returns a default mapping for the configuration @@ -68,5 +67,5 @@ public interface ConfigurableActionProvider { * @param action * @return */ - ActionMapping findDefaultMapping(@Nullable String configurationId, String action); + ActionMapping findDefaultMapping(String configurationId, String action); } diff --git a/extide/gradle/src/org/netbeans/modules/gradle/loaders/ExtensionPropertiesExtractor.java b/extide/gradle/src/org/netbeans/modules/gradle/loaders/ExtensionPropertiesExtractor.java index 474b66becda5..36541e631bb6 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/loaders/ExtensionPropertiesExtractor.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/loaders/ExtensionPropertiesExtractor.java @@ -26,6 +26,7 @@ import java.util.NoSuchElementException; import java.util.Objects; import java.util.Set; +import java.util.TreeMap; import java.util.stream.Collectors; import java.util.stream.Stream; import org.netbeans.modules.gradle.api.BuildPropertiesSupport; @@ -98,10 +99,10 @@ private static class PropertyEvaluator implements BuildPropertiesImplementation public PropertyEvaluator(Map propertyMap, Map propertyTypes, Map taskPropertyMap, Map taskPropertyTypes) { - this.propertyMap = propertyMap; - this.propertyTypes = propertyTypes; - this.taskPropertyMap = taskPropertyMap; - this.taskPropertyTypes = taskPropertyTypes; + this.propertyMap = new TreeMap<>(propertyMap); + this.propertyTypes = new TreeMap<>(propertyTypes); + this.taskPropertyMap = new TreeMap<>(taskPropertyMap); + this.taskPropertyTypes = new TreeMap<>(taskPropertyTypes); } @Override diff --git a/extide/gradle/src/org/netbeans/modules/gradle/loaders/GradleProjectLoaderImpl.java b/extide/gradle/src/org/netbeans/modules/gradle/loaders/GradleProjectLoaderImpl.java index 6a84a7efd2de..cef5dff005df 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/loaders/GradleProjectLoaderImpl.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/loaders/GradleProjectLoaderImpl.java @@ -90,7 +90,7 @@ public GradleProject loadProject(LoadOptions options, String... args) { LOGGER.log(Level.FINER, "Loaded with loader {0} -> {1}", new Object[] { loader, ret }); } if (ret != null) { - if (best == null || best.getQuality().notBetterThan(ret.getQuality())) { + if (ret.betterThan(best)) { best = ret; } if (ret.getQuality().atLeast(options.getAim())) { diff --git a/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java b/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java index 0d0dca3bde88..c1190f28e2b6 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java @@ -28,7 +28,6 @@ import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.io.PrintWriter; -import java.io.Serializable; import java.io.StringWriter; import java.lang.reflect.Method; import java.util.ArrayList; @@ -51,9 +50,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.swing.SwingUtilities; -import org.gradle.tooling.BuildAction; import org.gradle.tooling.BuildActionExecuter; -import org.gradle.tooling.BuildController; import org.gradle.tooling.CancellationToken; import org.gradle.tooling.CancellationTokenSource; import org.gradle.tooling.GradleConnectionException; @@ -187,8 +184,7 @@ private static GradleProject loadGradleProject(ReloadContext ctx, CancellationTo for (String s : keys) { Object o = info.getInfo().get(s); // format just the 1st level: - if (o instanceof Collection) { - Collection c = (Collection)o; + if (o instanceof Collection c) { if (!c.isEmpty()) { LOG.finer(String.format(" %-20s: [", s)); for (Object x: c) { @@ -200,8 +196,7 @@ private static GradleProject loadGradleProject(ReloadContext ctx, CancellationTo LOG.finer(" ]"); continue; } - } else if (o instanceof Map) { - Map m = (Map)o; + } else if (o instanceof Map m) { if (!m.isEmpty()) { LOG.finer(String.format(" %-20s: {", s)); List mkeys = new ArrayList<>(m.keySet()); @@ -273,15 +268,13 @@ private static GradleProject loadGradleProject(ReloadContext ctx, CancellationTo for (Report r : info.getReports()) { reps.add(copyReport(r)); } - Object o = new ArrayList(reps.stream(). + var o = reps.stream(). map((r) -> r.formatReportForHintOrProblem( true, FileUtil.toFileObject( ctx.project.getGradleFiles().getBuildScript() ) - )). - collect(Collectors.toList()) - ); + )).toList(); LOG.log(Level.FINE, "Project {0} loaded with exception, and with problems: {1}", new Object[] { ctx.project, @@ -293,22 +286,20 @@ private static GradleProject loadGradleProject(ReloadContext ctx, CancellationTo for (String s : info.getProblems()) { reps.add(GradleProject.createGradleReport(f == null ? null : f.toPath(), s)); } - return ctx.previous.invalidate(reps.toArray(new GradleReport[0])); + return ctx.previous.invalidate(reps.toArray(GradleReport[]::new)); } } } catch (GradleConnectionException | IllegalStateException ex) { LOG.log(FINE, "Failed to retrieve project information for: " + base.getProjectDir(), ex); List problems = exceptionsToProblems(ctx.project.getGradleFiles().getBuildScript(), ex); errors.openNotification(TIT_LOAD_FAILED(base.getProjectDir()), ex.getMessage(), GradleProjectErrorNotifications.bulletedList(problems)); - return ctx.previous.invalidate(problems.toArray(new GradleReport[0])); - } catch (ThreadDeath td) { - throw td; + return ctx.previous.invalidate(problems.toArray(GradleReport[]::new)); } catch (Throwable t) { // catch any possible other errors, report project loading failure - but complete the loading operation. LOG.log(Level.SEVERE, "Internal error during loading: " + base.getProjectDir(), t); List problems = exceptionsToProblems(ctx.project.getGradleFiles().getBuildScript(), t); errors.openNotification(TIT_LOAD_FAILED(base.getProjectDir()), t.getMessage(), GradleProjectErrorNotifications.bulletedList(problems)); - return ctx.previous.invalidate(problems.toArray(new GradleReport[0])); + return ctx.previous.invalidate(problems.toArray(GradleReport[]::new)); } finally { loadedProjects.incrementAndGet(); } diff --git a/extide/gradle/test/unit/data/buildprops/micronaut/build.gradle b/extide/gradle/test/unit/data/buildprops/micronaut/build.gradle index 6a1d7faa4dd0..130c49a380da 100644 --- a/extide/gradle/test/unit/data/buildprops/micronaut/build.gradle +++ b/extide/gradle/test/unit/data/buildprops/micronaut/build.gradle @@ -18,9 +18,9 @@ */ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" +// id("com.github.johnrengelman.shadow") version "7.1.2" // ExtensionPropertiesExtractorTest#testTaskListProperty fails with next point release - id("io.micronaut.application") version "3.6.5" + id("io.micronaut.application") version "4.6.1" } version = "0.1" diff --git a/extide/gradle/test/unit/data/buildprops/micronaut/gradle.properties b/extide/gradle/test/unit/data/buildprops/micronaut/gradle.properties index 2651a61b6336..bd7a8a8b94ba 100644 --- a/extide/gradle/test/unit/data/buildprops/micronaut/gradle.properties +++ b/extide/gradle/test/unit/data/buildprops/micronaut/gradle.properties @@ -15,4 +15,4 @@ # specific language governing permissions and limitations # under the License. -micronautVersion=3.6.0 +micronautVersion=4.10.0 diff --git a/extide/gradle/test/unit/data/buildprops/micronaut/gradle/wrapper/gradle-wrapper.properties b/extide/gradle/test/unit/data/buildprops/micronaut/gradle/wrapper/gradle-wrapper.properties index 5c82cb032420..ac57dd155af0 100644 --- a/extide/gradle/test/unit/data/buildprops/micronaut/gradle/wrapper/gradle-wrapper.properties +++ b/extide/gradle/test/unit/data/buildprops/micronaut/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/extide/gradle/test/unit/data/projects/externaldeps/p1/build.gradle b/extide/gradle/test/unit/data/projects/externaldeps/p1/build.gradle index 6ebe10fd76bd..fcb06ceb7388 100644 --- a/extide/gradle/test/unit/data/projects/externaldeps/p1/build.gradle +++ b/extide/gradle/test/unit/data/projects/externaldeps/p1/build.gradle @@ -17,10 +17,13 @@ * under the License. */ -apply plugin: 'java' -apply plugin: 'application' +plugins { + id 'application' +} -mainClassName = 'test.App' +application { + mainClass = 'test.App' +} group = 'nbtest' version = '0.1' diff --git a/extide/gradle/test/unit/data/projects/externaldeps/p2/build.gradle b/extide/gradle/test/unit/data/projects/externaldeps/p2/build.gradle index 7c1f03d73c5a..8bb98e328c89 100644 --- a/extide/gradle/test/unit/data/projects/externaldeps/p2/build.gradle +++ b/extide/gradle/test/unit/data/projects/externaldeps/p2/build.gradle @@ -17,10 +17,13 @@ * under the License. */ -apply plugin: 'java' -apply plugin: 'application' +plugins { + id 'application' +} -mainClassName = 'test.App2' +application { + mainClass = 'test.App2' +} jar.dependsOn(':p1:jar') diff --git a/extide/gradle/test/unit/data/projects/multi/p1/build.gradle b/extide/gradle/test/unit/data/projects/multi/p1/build.gradle index 6ebe10fd76bd..8e658d931b12 100644 --- a/extide/gradle/test/unit/data/projects/multi/p1/build.gradle +++ b/extide/gradle/test/unit/data/projects/multi/p1/build.gradle @@ -16,11 +16,13 @@ * specific language governing permissions and limitations * under the License. */ +plugins { + id 'application' +} -apply plugin: 'java' -apply plugin: 'application' - -mainClassName = 'test.App' +application { + mainClass = 'test.App' +} group = 'nbtest' version = '0.1' diff --git a/extide/gradle/test/unit/data/projects/multi/p2/build.gradle b/extide/gradle/test/unit/data/projects/multi/p2/build.gradle index 826da640d70f..ae8ac55639f4 100644 --- a/extide/gradle/test/unit/data/projects/multi/p2/build.gradle +++ b/extide/gradle/test/unit/data/projects/multi/p2/build.gradle @@ -17,10 +17,13 @@ * under the License. */ -apply plugin: 'java' -apply plugin: 'application' +plugins { + id 'application' +} -mainClassName = 'test.App2' +application { + mainClass = 'test.App2' +} group = 'nbtest' version = '0.1' diff --git a/extide/gradle/test/unit/data/projects/priming/broken1/build.gradle b/extide/gradle/test/unit/data/projects/priming/broken1/build.gradle index f239b4810d92..0c88a003f024 100644 --- a/extide/gradle/test/unit/data/projects/priming/broken1/build.gradle +++ b/extide/gradle/test/unit/data/projects/priming/broken1/build.gradle @@ -18,7 +18,7 @@ */ plugins { - id("io.micronaut.application") version "3.5.1" + id("io.micronaut.application") version "4.6.1" id('java') id('application') } @@ -27,8 +27,10 @@ repositories { mavenCentral() } -mainClassName = 'test.App' - dependencies { implementation("io.micronaut:micronaut-http-clientx") -} \ No newline at end of file +} + +application { + mainClass = 'test.App' +} diff --git a/extide/gradle/test/unit/data/projects/priming/broken1/gradle.properties b/extide/gradle/test/unit/data/projects/priming/broken1/gradle.properties index f6c83910d85b..7b7ea6b9b18b 100644 --- a/extide/gradle/test/unit/data/projects/priming/broken1/gradle.properties +++ b/extide/gradle/test/unit/data/projects/priming/broken1/gradle.properties @@ -1,2 +1,2 @@ -micronautVersion=3.6.0 +micronautVersion=4.10.0 diff --git a/extide/gradle/test/unit/data/projects/simple/build.gradle b/extide/gradle/test/unit/data/projects/simple/build.gradle index 6301ee767764..647bd4e13df7 100644 --- a/extide/gradle/test/unit/data/projects/simple/build.gradle +++ b/extide/gradle/test/unit/data/projects/simple/build.gradle @@ -17,7 +17,10 @@ * under the License. */ -apply plugin: 'java' -apply plugin: 'application' +plugins { + id 'application' +} -mainClassName = 'test.App' +application { + mainClass = 'test.App' +} diff --git a/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/VerifyGradleProjectTemplatesTest.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTemplateTestCase.java similarity index 87% rename from java/gradle.java/test/unit/src/org/netbeans/modules/gradle/VerifyGradleProjectTemplatesTest.java rename to extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTemplateTestCase.java index 4a1e203257a2..0df2b4932c59 100644 --- a/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/VerifyGradleProjectTemplatesTest.java +++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTemplateTestCase.java @@ -26,10 +26,12 @@ import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.logging.Level; -import java.util.logging.LogManager; +import java.util.logging.Logger; +import static junit.framework.TestCase.assertNotNull; +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectManager; -import org.netbeans.junit.NbModuleSuite; import org.netbeans.junit.NbTestCase; import org.netbeans.spi.project.ActionProgress; import org.netbeans.spi.project.ActionProvider; @@ -41,26 +43,25 @@ import org.openide.util.lookup.Lookups; import org.openide.util.lookup.ProxyLookup; -public class VerifyGradleProjectTemplatesTest extends NbTestCase { - - public VerifyGradleProjectTemplatesTest(String name) { +/** + * + * @author lkishalmi + */ +public class AbstractGradleProjectTemplateTestCase extends NbTestCase{ + public AbstractGradleProjectTemplateTestCase(String name) { super(name); } - public static junit.framework.Test suite() { - return NbModuleSuite.createConfiguration(VerifyGradleProjectTemplatesTest.class). - gui(false). - enableModules(".*"). - honorAutoloadEager(true). - suite(); - } - @Override protected void setUp() throws Exception { clearWorkDir(); } - public void testGradleProjectTemplates() throws Exception { + protected void assertGradleProjectTemplates() throws Exception { + assertGradleProjectTemplates(getClass().getPackageName().replace('.', '-')); + } + + protected void assertGradleProjectTemplates(String forTemplatePath) throws Exception { FileObject root = FileUtil.getConfigFile("Templates/Project/Gradle"); assertNotNull("Gradle project folder found", root); Enumeration projectTemplates = root.getChildren(true); @@ -72,6 +73,9 @@ public void testGradleProjectTemplates() throws Exception { while (projectTemplates.hasMoreElements()) { FileObject fo = projectTemplates.nextElement(); + if (!fo.getPath().contains(forTemplatePath)) { + continue; + } DataObject template = DataObject.find(fo); if (!template.isTemplate()) { continue; @@ -83,13 +87,13 @@ public void testGradleProjectTemplates() throws Exception { pw.append("Exception instantiating ").append(fo.getPath()).append("\n"); ex.printStackTrace(pw); err++; - + try { - LogManager.getLogManager().getLogger("org.netbeans.modules.gradle.loaders.LegacyProjectLoader").setLevel(Level.FINER); + Logger.getLogger("org.netbeans.modules.gradle.loaders.LegacyProjectLoader").setLevel(Level.FINER); pw.append("Running again with increased loglevel:").append(fo.getPath()).append("\n"); verifySingleTemplate(cnt + 1000, template); } finally { - LogManager.getLogManager().getLogger("org.netbeans.modules.gradle.loaders.LegacyProjectLoader").setLevel(Level.INFO); + Logger.getLogger("org.netbeans.modules.gradle.loaders.LegacyProjectLoader").setLevel(Level.INFO); } } } @@ -97,6 +101,7 @@ public void testGradleProjectTemplates() throws Exception { if (err > 0) { throw new IOException("Some projects failed (" + err + "/" + cnt + "):\n" + w.toString()); } + assertTrue("No template was tested", cnt > 0); } private void verifySingleTemplate(int cnt, DataObject template) throws IllegalArgumentException, IOException, InterruptedException { @@ -182,4 +187,5 @@ private static String names(String msg, final FileObject pd) { } return sb.toString(); } + } diff --git a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTestCase.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTestCase.java index e81df27f7a97..cae52299e009 100644 --- a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTestCase.java +++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/AbstractGradleProjectTestCase.java @@ -39,7 +39,6 @@ import org.openide.filesystems.FileUtil; import org.openide.filesystems.test.TestFileUtils; import org.openide.modules.DummyInstalledFileLocator; -import org.openide.util.Exceptions; /** * diff --git a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/loaders/ExtensionPropertiesExtractorTest.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/loaders/ExtensionPropertiesExtractorTest.java index 76ce26340ff3..72761a378bdd 100644 --- a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/loaders/ExtensionPropertiesExtractorTest.java +++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/loaders/ExtensionPropertiesExtractorTest.java @@ -126,7 +126,7 @@ public void testListExtensionProperty() throws Exception { BuildPropertiesSupport.Property prop; - prop = support.findExtensionProperty("nativeTest", "runtimeArgs"); + prop = support.findExtensionProperty("graalvmNative.binaries.main", "buildArgs"); assertNotNull(prop); assertEquals(BuildPropertiesSupport.PropertyKind.LIST, prop.getKind()); Iterable it = support.items(prop, null); @@ -138,9 +138,13 @@ public void testListExtensionProperty() throws Exception { BuildPropertiesSupport.Property item = iter.next(); assertEquals(BuildPropertiesSupport.PropertyKind.PRIMITIVE, item.getKind()); - assertTrue(item.getStringValue().contains("--xml-output-dir")); + assertEquals("x", item.getStringValue()); assertTrue(iter.hasNext()); - iter.next(); + item = iter.next(); + assertEquals("y", item.getStringValue()); + assertTrue(iter.hasNext()); + item = iter.next(); + assertEquals("z", item.getStringValue()); assertFalse(iter.hasNext()); } @@ -286,7 +290,7 @@ public void testTaskListProperty() throws Exception { BuildPropertiesSupport support = BuildPropertiesSupport.get(p); assertNotNull(support); - BuildPropertiesSupport.Property prop = support.findTaskProperty("nativeCompile", "options.runtimeArgs"); + BuildPropertiesSupport.Property prop = support.findTaskProperty("nativeRun", "runtimeArgs"); assertNotNull(prop); assertEquals(PropertyKind.LIST, prop.getKind()); diff --git a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/newproject/VerifyProjectTemplatesTest.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/newproject/VerifyProjectTemplatesTest.java new file mode 100644 index 000000000000..1cc7771ac27e --- /dev/null +++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/newproject/VerifyProjectTemplatesTest.java @@ -0,0 +1,47 @@ +package org.netbeans.modules.gradle.newproject; + + +import org.netbeans.junit.NbModuleSuite; +import org.netbeans.modules.gradle.AbstractGradleProjectTemplateTestCase; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +/** + * + * @author lkishalmi + */ +public class VerifyProjectTemplatesTest extends AbstractGradleProjectTemplateTestCase { + + public VerifyProjectTemplatesTest(String name) { + super(name); + } + + public static junit.framework.Test suite() { + return NbModuleSuite.createConfiguration(VerifyProjectTemplatesTest.class). + gui(false). + enableModules(".*"). + honorAutoloadEager(true). + suite(); + } + + public void testProjectTemplates() throws Exception { + assertGradleProjectTemplates(); + } +} diff --git a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/queries/ProjectContainerProviderTest.java b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/queries/ProjectContainerProviderTest.java index e61685965532..0c4660a04b14 100644 --- a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/queries/ProjectContainerProviderTest.java +++ b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/queries/ProjectContainerProviderTest.java @@ -22,6 +22,7 @@ import java.util.Random; import java.util.Set; import static junit.framework.TestCase.assertFalse; +import org.junit.Ignore; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectManager; import org.netbeans.modules.gradle.AbstractGradleProjectTestCase; @@ -105,7 +106,9 @@ public void testComplexMultiProject() throws IOException { } + @Ignore("With Gradle 9, these kind of projects regarder illegal in Gradle as well.") public void testWeirdMultiProject() throws IOException { + int rnd = new Random().nextInt(1000000); FileObject a = createGradleProject("projectA-" + rnd, "", "include ':projectB'\n include ':folder:projectC'\nproject(':folder:projectC').projectDir = new File(\"$rootDir/projectC\")"); diff --git a/extide/libs.gradle/external/binaries-list b/extide/libs.gradle/external/binaries-list index b0279317139c..365f6a9fff03 100644 --- a/extide/libs.gradle/external/binaries-list +++ b/extide/libs.gradle/external/binaries-list @@ -15,4 +15,4 @@ # specific language governing permissions and limitations # under the License. -A294A78C613552ACAD8FC9362806CEB21245174F https://repo.gradle.org/artifactory/libs-releases/org/gradle/gradle-tooling-api/8.14/gradle-tooling-api-8.14.jar gradle-tooling-api-8.14.jar +5DE943D707DEB36CD23919473870BF0A051AB24D https://repo.gradle.org/artifactory/libs-releases/org/gradle/gradle-tooling-api/9.3.0/gradle-tooling-api-9.3.0.jar gradle-tooling-api-9.3.0.jar diff --git a/extide/libs.gradle/external/gradle-tooling-api-8.14-license.txt b/extide/libs.gradle/external/gradle-tooling-api-9.3.0-license.txt similarity index 99% rename from extide/libs.gradle/external/gradle-tooling-api-8.14-license.txt rename to extide/libs.gradle/external/gradle-tooling-api-9.3.0-license.txt index 13f42c47af90..097d03d4a656 100644 --- a/extide/libs.gradle/external/gradle-tooling-api-8.14-license.txt +++ b/extide/libs.gradle/external/gradle-tooling-api-9.3.0-license.txt @@ -1,7 +1,7 @@ Name: Gradle Tooling API Description: Gradle Tooling API -Version: 8.14 -Files: gradle-tooling-api-8.14.jar +Version: 9.3.0 +Files: gradle-tooling-api-9.3.0.jar License: Apache-2.0 Origin: Gradle Inc. URL: https://gradle.org/ diff --git a/extide/libs.gradle/external/gradle-tooling-api-8.14-notice.txt b/extide/libs.gradle/external/gradle-tooling-api-9.3.0-notice.txt similarity index 73% rename from extide/libs.gradle/external/gradle-tooling-api-8.14-notice.txt rename to extide/libs.gradle/external/gradle-tooling-api-9.3.0-notice.txt index ceb605c681af..055bc1416070 100644 --- a/extide/libs.gradle/external/gradle-tooling-api-8.14-notice.txt +++ b/extide/libs.gradle/external/gradle-tooling-api-9.3.0-notice.txt @@ -1,8 +1,8 @@ Gradle Inc.'s Gradle Tooling API -Copyright 2007-2024 Gradle Inc. +Copyright 2007-2026 Gradle Inc. This product includes software developed at Gradle Inc. (https://gradle.org/). This product includes/uses SLF4J (https://www.slf4j.org/) -developed by QOS.ch, 2004-2024 +developed by QOS.ch, 2004-2025 diff --git a/extide/libs.gradle/manifest.mf b/extide/libs.gradle/manifest.mf index b6722e6bbcfa..600f4c6d957a 100644 --- a/extide/libs.gradle/manifest.mf +++ b/extide/libs.gradle/manifest.mf @@ -1,5 +1,5 @@ Manifest-Version: 1.0 AutoUpdate-Show-In-Client: false -OpenIDE-Module: org.netbeans.modules.libs.gradle/8 +OpenIDE-Module: org.netbeans.modules.libs.gradle/9 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/libs/gradle/Bundle.properties -OpenIDE-Module-Specification-Version: 8.15 +OpenIDE-Module-Specification-Version: 9.3 diff --git a/extide/libs.gradle/nbproject/project.properties b/extide/libs.gradle/nbproject/project.properties index 21888706c422..2ccf694acdfd 100644 --- a/extide/libs.gradle/nbproject/project.properties +++ b/extide/libs.gradle/nbproject/project.properties @@ -16,10 +16,10 @@ # under the License. nbm.needs.restart=true -javac.source=1.8 +javac.release=17 javac.compilerargs=-Xlint -Xlint:-serial # Sigtest fails to read the classes in the gradle-tooling-api sigtest.skip.gen=true -release.external/gradle-tooling-api-8.14.jar=modules/gradle/gradle-tooling-api.jar +release.external/gradle-tooling-api-9.3.0.jar=modules/gradle/gradle-tooling-api.jar diff --git a/extide/libs.gradle/nbproject/project.xml b/extide/libs.gradle/nbproject/project.xml index 8e0c5c87d0c4..f3e83ec4cf56 100644 --- a/extide/libs.gradle/nbproject/project.xml +++ b/extide/libs.gradle/nbproject/project.xml @@ -39,7 +39,7 @@ gradle/gradle-tooling-api.jar - external/gradle-tooling-api-8.14.jar + external/gradle-tooling-api-9.3.0.jar diff --git a/java/gradle.dependencies/test/unit/data/projects/micronaut/build.gradle b/java/gradle.dependencies/test/unit/data/projects/micronaut/build.gradle index 3ce34ee2b6cf..74c0a848956e 100644 --- a/java/gradle.dependencies/test/unit/data/projects/micronaut/build.gradle +++ b/java/gradle.dependencies/test/unit/data/projects/micronaut/build.gradle @@ -18,8 +18,7 @@ */ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" - id("io.micronaut.application") version "3.5.1" + id("io.micronaut.application") version "4.6.1" } version = "0.1" @@ -31,27 +30,30 @@ repositories { dependencies { annotationProcessor("io.micronaut:micronaut-http-validation") - implementation("io.micronaut:micronaut-http-client") - implementation("io.micronaut:micronaut-jackson-databind") + implementation("io.micronaut:micronaut-http-client-jdk") + implementation("io.micronaut.serde:micronaut-serde-jackson") implementation("jakarta.annotation:jakarta.annotation-api") runtimeOnly("ch.qos.logback:logback-classic") - implementation("io.micronaut:micronaut-validation") - implementation("org.apache.logging.log4j:log4j-core:2.17.0") + implementation("io.micronaut.validation:micronaut-validation") + implementation("org.apache.logging.log4j:log4j-core:2.24.3") } application { mainClass.set("com.example.Application") } + java { - sourceCompatibility = JavaVersion.toVersion("11") - targetCompatibility = JavaVersion.toVersion("11") + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } graalvmNative.toolchainDetection = false micronaut { - runtime("netty") + version "4.9.4" + runtime("http_server_jdk") testRuntime("junit5") processing { incremental(true) diff --git a/java/gradle.dependencies/test/unit/data/projects/micronaut/build2.gradle b/java/gradle.dependencies/test/unit/data/projects/micronaut/build2.gradle index f33b0d4e9559..e397ba3d54aa 100644 --- a/java/gradle.dependencies/test/unit/data/projects/micronaut/build2.gradle +++ b/java/gradle.dependencies/test/unit/data/projects/micronaut/build2.gradle @@ -18,8 +18,7 @@ */ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" - id("io.micronaut.application") version "3.5.1" + id("io.micronaut.application") version "4.6.1" } version = "0.1" @@ -31,13 +30,14 @@ repositories { dependencies { annotationProcessor("io.micronaut:micronaut-http-validation") - implementation("io.micronaut:micronaut-http-client") - implementation("io.micronaut:micronaut-jackson-databind") + implementation("io.micronaut:micronaut-http-client-jdk") + implementation("io.micronaut.serde:micronaut-serde-jackson") implementation("jakarta.annotation:jakarta.annotation-api") runtimeOnly("ch.qos.logback:logback-classic") + implementation( - "io.micronaut:micronaut-validation", - "org.apache.logging.log4j:log4j-core:2.17.0" + "io.micronaut.validation:micronaut-validation", + "org.apache.logging.log4j:log4j-core:2.24.3" ) } @@ -45,14 +45,17 @@ dependencies { application { mainClass.set("com.example.Application") } + java { - sourceCompatibility = JavaVersion.toVersion("11") - targetCompatibility = JavaVersion.toVersion("11") + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } graalvmNative.toolchainDetection = false micronaut { - runtime("netty") + version "4.9.4" + runtime("http_server_jdk") testRuntime("junit5") processing { incremental(true) diff --git a/java/gradle.dependencies/test/unit/data/projects/micronaut/build3.gradle b/java/gradle.dependencies/test/unit/data/projects/micronaut/build3.gradle index 436e432b9582..af1e5356ae37 100644 --- a/java/gradle.dependencies/test/unit/data/projects/micronaut/build3.gradle +++ b/java/gradle.dependencies/test/unit/data/projects/micronaut/build3.gradle @@ -18,8 +18,7 @@ */ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" - id("io.micronaut.application") version "3.5.1" + id("io.micronaut.application") version "4.6.1" } version = "0.1" @@ -32,14 +31,17 @@ repositories { application { mainClass.set("com.example.Application") } + java { - sourceCompatibility = JavaVersion.toVersion("11") - targetCompatibility = JavaVersion.toVersion("11") + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } graalvmNative.toolchainDetection = false micronaut { - runtime("netty") + version "4.9.4" + runtime("http_server_jdk") testRuntime("junit5") processing { incremental(true) diff --git a/java/gradle.dependencies/test/unit/data/projects/micronaut/gradle.properties b/java/gradle.dependencies/test/unit/data/projects/micronaut/gradle.properties index 2651a61b6336..635ac904cb67 100644 --- a/java/gradle.dependencies/test/unit/data/projects/micronaut/gradle.properties +++ b/java/gradle.dependencies/test/unit/data/projects/micronaut/gradle.properties @@ -15,4 +15,4 @@ # specific language governing permissions and limitations # under the License. -micronautVersion=3.6.0 +micronautVersion=4.9.4 diff --git a/java/gradle.dependencies/test/unit/data/projects/micronaut/gradle/wrapper/gradle-wrapper.properties b/java/gradle.dependencies/test/unit/data/projects/micronaut/gradle/wrapper/gradle-wrapper.properties index 8049c684f04f..ac57dd155af0 100644 --- a/java/gradle.dependencies/test/unit/data/projects/micronaut/gradle/wrapper/gradle-wrapper.properties +++ b/java/gradle.dependencies/test/unit/data/projects/micronaut/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/java/gradle.dependencies/test/unit/data/projects/multi/gradle.properties b/java/gradle.dependencies/test/unit/data/projects/multi/gradle.properties index 770867193879..358b4de42ed5 100644 --- a/java/gradle.dependencies/test/unit/data/projects/multi/gradle.properties +++ b/java/gradle.dependencies/test/unit/data/projects/multi/gradle.properties @@ -1 +1 @@ -micronautVersion=3.10.2 +micronautVersion=4.9.0 diff --git a/java/gradle.dependencies/test/unit/data/projects/multi/gradle/wrapper/gradle-wrapper.properties b/java/gradle.dependencies/test/unit/data/projects/multi/gradle/wrapper/gradle-wrapper.properties index 98debb84d51d..ac57dd155af0 100644 --- a/java/gradle.dependencies/test/unit/data/projects/multi/gradle/wrapper/gradle-wrapper.properties +++ b/java/gradle.dependencies/test/unit/data/projects/multi/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/java/gradle.dependencies/test/unit/data/projects/multi/oci/build.gradle b/java/gradle.dependencies/test/unit/data/projects/multi/oci/build.gradle index ef7b070ca405..92391ce5abcb 100644 --- a/java/gradle.dependencies/test/unit/data/projects/multi/oci/build.gradle +++ b/java/gradle.dependencies/test/unit/data/projects/multi/oci/build.gradle @@ -1,6 +1,5 @@ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" - id("io.micronaut.application") version "3.7.10" + id("io.micronaut.application") version "4.6.1" } version = "0.1" @@ -12,12 +11,12 @@ repositories { dependencies { annotationProcessor("io.micronaut:micronaut-http-validation") - implementation("io.micronaut:micronaut-http-client") - implementation("io.micronaut:micronaut-jackson-databind") + implementation("io.micronaut:micronaut-http-client-jdk") + implementation("io.micronaut.serde:micronaut-serde-jackson") implementation("jakarta.annotation:jakarta.annotation-api") runtimeOnly("ch.qos.logback:logback-classic") implementation(project(":app")) - implementation("io.micronaut:micronaut-validation") + implementation("io.micronaut.validation:micronaut-validation") } @@ -25,13 +24,15 @@ dependencies { application { mainClass.set("com.example.Application") } + java { - sourceCompatibility = JavaVersion.toVersion("11") - targetCompatibility = JavaVersion.toVersion("11") + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } task testJar(type: Jar) { - classifier = 'tests' + archiveClassifier = 'tests' from sourceSets.test.output } diff --git a/java/gradle.dependencies/test/unit/data/projects/multi/settings.gradle b/java/gradle.dependencies/test/unit/data/projects/multi/settings.gradle index e6db119b5346..7f0ef99f2726 100644 --- a/java/gradle.dependencies/test/unit/data/projects/multi/settings.gradle +++ b/java/gradle.dependencies/test/unit/data/projects/multi/settings.gradle @@ -2,5 +2,4 @@ rootProject.name="demo" include("app") -include("aws") include("oci") diff --git a/java/gradle.dependencies/test/unit/src/org/netbeans/modules/gradle/dependencies/DependencyModifierImplTest.java b/java/gradle.dependencies/test/unit/src/org/netbeans/modules/gradle/dependencies/DependencyModifierImplTest.java index 7bf21361a157..3b2947c9eb61 100644 --- a/java/gradle.dependencies/test/unit/src/org/netbeans/modules/gradle/dependencies/DependencyModifierImplTest.java +++ b/java/gradle.dependencies/test/unit/src/org/netbeans/modules/gradle/dependencies/DependencyModifierImplTest.java @@ -153,14 +153,14 @@ private void assertDependencyAddFails(String msg, ArtifactSpec art) throws Excep } public void testDependencyConflict() throws Exception { - Project p = makeProject("projects/micronaut"); - assertDependencyAddFails("Versionless artifacts should cause conflict", ArtifactSpec.make("io.micronaut", "micronaut-http-client")); - assertDependencyAddFails("Versioned artifact added on top of versionless should cause conflict", ArtifactSpec.make("io.micronaut", "micronaut-http-client", "1.0")); + makeProject("projects/micronaut"); + assertDependencyAddFails("Versionless artifacts should cause conflict", ArtifactSpec.make("io.micronaut", "micronaut-http-client-jdk")); + assertDependencyAddFails("Versioned artifact added on top of versionless should cause conflict", ArtifactSpec.make("io.micronaut", "micronaut-http-client-jdk", "1.0")); assertDependencyAddFails("Versionless artifact added on top of versioned should conflict", ArtifactSpec.make("org.apache.logging.log4j", "log4j-core")); assertDependencyAddFails("Different versions should conflict", ArtifactSpec.make("org.apache.logging.log4j", "log4j-core", "2.17.1")); } - private void assertNoChange(String reason, ArtifactSpec spec) throws Exception { + private void assertNoChange(String reason, ArtifactSpec spec) throws Exception { Dependency toAdd = Dependency.make(spec, Scopes.COMPILE); DependencyChange change = DependencyChange.builder(DependencyChange.Kind.ADD). dependency(toAdd). @@ -173,7 +173,7 @@ private void assertNoChange(String reason, ArtifactSpec spec) throws Exception { public void testMatchingDependencySkips() throws Exception { makeProject("projects/micronaut"); - assertNoChange("Exactly matching artifact should be no-op", ArtifactSpec.make("io.micronaut", "micronaut-http-client")); + assertNoChange("Exactly matching artifact should be no-op", ArtifactSpec.make("io.micronaut", "micronaut-http-client-jdk")); } public void testAddUnknownScopeFails() throws Exception { @@ -223,7 +223,7 @@ public void testAbstractScopesMappedToGradle() throws Exception { public void testAddGenericCompilation() throws Exception { Project p = makeProject("projects/micronaut"); - ArtifactSpec art = ArtifactSpec.make("io.micronaut", "micronaut-http-client2"); + ArtifactSpec art = ArtifactSpec.make("io.micronaut", "micronaut-http-client2"); Dependency toAdd = Dependency.make(art, Scopes.COMPILE); DependencyChange change = DependencyChange.builder(DependencyChange.Kind.ADD). dependency(toAdd). @@ -288,7 +288,7 @@ public void propertyChange(PropertyChangeEvent evt) { assertTrue("Should successfuly load the project", gp.getQuality().atLeast(NbGradleProject.Quality.FULL)); } - private void assertContainsArtifacts(boolean shouldContainDirect, String configuration, ArtifactSpec... artifacts) throws Exception { + private void assertContainsArtifacts(boolean shouldContainDirect, String configuration, ArtifactSpec... artifacts) throws Exception { Project p = this.project; List artifactIds = Arrays.asList(artifacts).stream().map(a -> a.getGroupId() + ":" + a.getArtifactId()).collect(Collectors.toList()); List matches = new ArrayList<>(artifactIds); @@ -324,7 +324,7 @@ private void assertContainsArtifacts(boolean shouldContainDirect, String configu } } - private void assertContainsDependency(boolean containsInScope, Scope scope, ArtifactSpec... artifacts) throws Exception { + private void assertContainsDependency(boolean containsInScope, Scope scope, ArtifactSpec... artifacts) throws Exception { Project p = this.project; List artifactIds = Arrays.asList(artifacts).stream().map(a -> a.getGroupId() + ":" + a.getArtifactId()).collect(Collectors.toList()); List matches = new ArrayList<>(artifactIds); @@ -355,7 +355,7 @@ private void assertContainsDependency(boolean containsInScope, Scope scope, Arti } void assertAddRouterValid() throws Exception { - ArtifactSpec art = ArtifactSpec.make("io.micronaut", "micronaut-tracing"); + ArtifactSpec art = ArtifactSpec.make("io.micronaut.tracing", "micronaut-tracing-opentelemetry"); Dependency toAdd = Dependency.make(art, Scopes.COMPILE); DependencyChange change = DependencyChange.builder(DependencyChange.Kind.ADD). dependency(toAdd). @@ -380,8 +380,8 @@ public void testValidAfterDependencyBlock() throws Exception { public void testInsertMultipleDependencies() throws Exception { makeProject("projects/micronaut", "build2.gradle"); - ArtifactSpec art = ArtifactSpec.make("io.micronaut", "micronaut-messaging"); - ArtifactSpec art2 = ArtifactSpec.make("io.micronaut", "micronaut-tracing"); + ArtifactSpec art = ArtifactSpec.make("io.micronaut", "micronaut-messaging"); + ArtifactSpec art2 = ArtifactSpec.make("io.micronaut.tracing", "micronaut-tracing-opentelemetry"); Dependency toAdd = Dependency.make(art, Scopes.RUNTIME); Dependency toAdd2 = Dependency.make(art2, Scopes.RUNTIME); @@ -400,7 +400,7 @@ public void testInsertMultipleDependencies() throws Exception { public void testAddAnnotationProcessor() throws Exception { makeProject("projects/micronaut", "build2.gradle"); - ArtifactSpec art = ArtifactSpec.make("io.micronaut.data", "micronaut-data-processor"); + ArtifactSpec art = ArtifactSpec.make("io.micronaut.data", "micronaut-data-processor"); Dependency toAdd = Dependency.make(art, Scopes.PROCESS); DependencyChange change = DependencyChange.builder(DependencyChange.Kind.ADD). dependency(toAdd). diff --git a/java/gradle.java/nbproject/project.xml b/java/gradle.java/nbproject/project.xml index e02a778936ad..826e590c6a99 100644 --- a/java/gradle.java/nbproject/project.xml +++ b/java/gradle.java/nbproject/project.xml @@ -110,7 +110,7 @@ 2 - 2.40 + 2.49
@@ -373,6 +373,11 @@ org.netbeans.modules.java.j2seplatform + + org.netbeans.modules.gradle + + + org.netbeans.modules.project.dependency diff --git a/java/gradle.java/test/unit/data/artifacts/shadowed/build.gradle b/java/gradle.java/test/unit/data/artifacts/shadowed/build.gradle index 076915ca6c45..92463ae95adf 100644 --- a/java/gradle.java/test/unit/data/artifacts/shadowed/build.gradle +++ b/java/gradle.java/test/unit/data/artifacts/shadowed/build.gradle @@ -1,12 +1,14 @@ plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" + id "com.gradleup.shadow" version "9.3.0" } apply plugin: 'java' apply plugin: 'application' -mainClassName = 'test.App' +application { + mainClass = 'test.App' +} run { jvmArgs '-Dtest.foo=bar', '-Dtest.bar=foo' diff --git a/java/gradle.java/test/unit/data/artifacts/shadowed/gradle/wrapper/gradle-wrapper.properties b/java/gradle.java/test/unit/data/artifacts/shadowed/gradle/wrapper/gradle-wrapper.properties index 5c82cb032420..ac57dd155af0 100644 --- a/java/gradle.java/test/unit/data/artifacts/shadowed/gradle/wrapper/gradle-wrapper.properties +++ b/java/gradle.java/test/unit/data/artifacts/shadowed/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/java/gradle.java/test/unit/data/artifacts/withTests/build.gradle b/java/gradle.java/test/unit/data/artifacts/withTests/build.gradle index efb11b2f14f6..a2f0471ad28f 100644 --- a/java/gradle.java/test/unit/data/artifacts/withTests/build.gradle +++ b/java/gradle.java/test/unit/data/artifacts/withTests/build.gradle @@ -1,7 +1,9 @@ apply plugin: 'java' apply plugin: 'application' -mainClassName = 'test.App' +application { + mainClass = 'test.App' +} run { jvmArgs '-Dtest.foo=bar', '-Dtest.bar=foo' diff --git a/java/gradle.java/test/unit/data/artifacts/withTests/gradle/wrapper/gradle-wrapper.properties b/java/gradle.java/test/unit/data/artifacts/withTests/gradle/wrapper/gradle-wrapper.properties index 5c82cb032420..ac57dd155af0 100644 --- a/java/gradle.java/test/unit/data/artifacts/withTests/gradle/wrapper/gradle-wrapper.properties +++ b/java/gradle.java/test/unit/data/artifacts/withTests/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/java/gradle.java/test/unit/data/dependencies/micronaut/build.gradle b/java/gradle.java/test/unit/data/dependencies/micronaut/build.gradle index 7bfa7a3e8b3a..e397ba3d54aa 100644 --- a/java/gradle.java/test/unit/data/dependencies/micronaut/build.gradle +++ b/java/gradle.java/test/unit/data/dependencies/micronaut/build.gradle @@ -18,8 +18,7 @@ */ plugins { - id("com.github.johnrengelman.shadow") version "7.1.2" - id("io.micronaut.application") version "3.7.10" + id("io.micronaut.application") version "4.6.1" } version = "0.1" @@ -31,16 +30,14 @@ repositories { dependencies { annotationProcessor("io.micronaut:micronaut-http-validation") - implementation("io.micronaut:micronaut-http-client") - implementation( - "io.micronaut:micronaut-jackson-databind" - ) + implementation("io.micronaut:micronaut-http-client-jdk") + implementation("io.micronaut.serde:micronaut-serde-jackson") implementation("jakarta.annotation:jakarta.annotation-api") runtimeOnly("ch.qos.logback:logback-classic") implementation( - "io.micronaut:micronaut-validation", - "org.apache.logging.log4j:log4j-core:2.17.0" + "io.micronaut.validation:micronaut-validation", + "org.apache.logging.log4j:log4j-core:2.24.3" ) } @@ -48,14 +45,17 @@ dependencies { application { mainClass.set("com.example.Application") } + java { - sourceCompatibility = JavaVersion.toVersion("11") - targetCompatibility = JavaVersion.toVersion("11") + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } graalvmNative.toolchainDetection = false micronaut { - runtime("netty") + version "4.9.4" + runtime("http_server_jdk") testRuntime("junit5") processing { incremental(true) diff --git a/java/gradle.java/test/unit/data/dependencies/micronaut/gradle/wrapper/gradle-wrapper.properties b/java/gradle.java/test/unit/data/dependencies/micronaut/gradle/wrapper/gradle-wrapper.properties index 5c82cb032420..ac57dd155af0 100644 --- a/java/gradle.java/test/unit/data/dependencies/micronaut/gradle/wrapper/gradle-wrapper.properties +++ b/java/gradle.java/test/unit/data/dependencies/micronaut/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/newproject/VerifyGradleProjectTemplatesTest.java b/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/newproject/VerifyGradleProjectTemplatesTest.java new file mode 100644 index 000000000000..bc90296e3051 --- /dev/null +++ b/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/newproject/VerifyGradleProjectTemplatesTest.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.netbeans.modules.gradle.java.newproject; + +import org.netbeans.junit.NbModuleSuite; +import org.netbeans.modules.gradle.AbstractGradleProjectTemplateTestCase; + +public class VerifyGradleProjectTemplatesTest extends AbstractGradleProjectTemplateTestCase { + + public VerifyGradleProjectTemplatesTest(String name) { + super(name); + } + + public static junit.framework.Test suite() { + return NbModuleSuite.createConfiguration(VerifyGradleProjectTemplatesTest.class). + gui(false). + enableModules(".*"). + honorAutoloadEager(true). + suite(); + } + + public void testProjectTemplates() throws Exception { + assertGradleProjectTemplates(); + } +} diff --git a/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/queries/GradleDependenciesImplementationTest.java b/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/queries/GradleDependenciesImplementationTest.java index f8ccc336d08a..43584f482042 100644 --- a/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/queries/GradleDependenciesImplementationTest.java +++ b/java/gradle.java/test/unit/src/org/netbeans/modules/gradle/java/queries/GradleDependenciesImplementationTest.java @@ -21,16 +21,11 @@ import java.io.File; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import org.netbeans.api.editor.document.LineDocument; import org.netbeans.api.editor.document.LineDocumentUtils; import org.netbeans.api.project.Project; -import org.netbeans.api.project.ProjectManager; -import org.netbeans.api.project.ui.OpenProjects; -import org.netbeans.junit.NbTestCase; -import org.netbeans.modules.gradle.ProjectTrust; +import org.netbeans.modules.gradle.AbstractGradleProjectTestCase; import org.netbeans.modules.gradle.api.GradleBaseProject; -import org.netbeans.modules.gradle.api.NbGradleProject; import org.netbeans.modules.gradle.options.GradleExperimentalSettings; import org.netbeans.modules.project.dependency.ArtifactSpec; import org.netbeans.modules.project.dependency.Dependency; @@ -48,7 +43,7 @@ * * @author sdedic */ -public class GradleDependenciesImplementationTest extends NbTestCase { +public class GradleDependenciesImplementationTest extends AbstractGradleProjectTestCase { FileObject projectDir; File destDirF; @@ -92,16 +87,7 @@ protected void tearDown() throws Exception { private Project makeProject(String subdir) throws Exception { FileObject src = FileUtil.toFileObject(getDataDir()).getFileObject(subdir); projectDir = FileUtil.copyFile(src, FileUtil.toFileObject(getWorkDir()), src.getNameExt()); - - Project p = ProjectManager.getDefault().findProject(projectDir); - assertNotNull(p); - ProjectTrust.getDefault().trustProject(p); - - OpenProjects.getDefault().open(new Project[] { p }, true); - OpenProjects.getDefault().openProjects().get(); - - NbGradleProject.get(p).toQuality("Load data", NbGradleProject.Quality.FULL, false).toCompletableFuture().get(); - return p; + return openProject(projectDir); } public void testSimpleProject() throws Exception { @@ -184,9 +170,9 @@ public void testLocationOfBlockDependencyList() throws Exception { ); assertNotNull("Dependency service is supported", r); - Dependency pin1 = r.getRoot().getChildren().stream().filter(d -> d.toString().contains("io.micronaut:micronaut-validation")).findAny().get(); + Dependency pin1 = r.getRoot().getChildren().stream().filter(d -> d.toString().contains("io.micronaut.validation:micronaut-validation")).findAny().get(); Dependency pin2 = r.getRoot().getChildren().stream().filter(d -> d.toString().contains("ch.qos.logback:logback-classic")).findAny().get(); - Dependency pin3 = r.getRoot().getChildren().stream().filter(d -> d.toString().contains("io.micronaut:micronaut-jackson-databind")).findAny().get(); + Dependency pin3 = r.getRoot().getChildren().stream().filter(d -> d.toString().contains("io.micronaut.serde:micronaut-serde-jackson")).findAny().get(); SourceLocation loc = r.getDeclarationRange(pin2, DependencyResult.PART_CONTAINER); assertNull(loc); @@ -221,45 +207,26 @@ public void testMicronautProject() throws Exception { assertNotNull("Dependency service is supported", r); assertEquals(9, r.getRoot().getChildren().size()); - Optional dep = r.getRoot().getChildren().stream().filter(d -> d.getArtifact().toString().equals("io.micronaut:micronaut-bom:3.6.0")).findFirst(); + Optional dep = r.getRoot().getChildren().stream().filter(d -> d.getArtifact().toString().equals("io.micronaut.platform:micronaut-platform:4.9.4")).findFirst(); assertTrue("Plugin - injected dependency should be present", dep.isPresent()); SourceLocation srcLoc = r.getDeclarationRange(dep.get(), null); assertNull("Implied dependencies do not have source location(s) - yet!", srcLoc); - dep = r.getRoot().getChildren().stream().filter(d -> d.getArtifact().toString().equals("org.apache.logging.log4j:log4j-core:2.17.0")).findFirst(); + dep = r.getRoot().getChildren().stream().filter(d -> d.getArtifact().toString().equals("org.apache.logging.log4j:log4j-core:2.24.3")).findFirst(); assertTrue("Explicit dependency is present", dep.isPresent()); srcLoc = r.getDeclarationRange(dep.get(), null); - assertNotNull("Explicit dependency should have a location"); + assertNotNull("Explicit dependency should have a location", srcLoc); assertNull("Explicit dependencies are not implied", srcLoc.getImpliedBy()); - - // there are more paths to io.micronaut:micronaut-websocket:3.6.0; some of them are through an explicit dependency, - // some through an injected one, micronaut-bom, which does not have any SourceLocation atm. - List deps = r.getRoot().getChildren().stream().flatMap(d -> d.getChildren().stream()).filter(d -> - d.getArtifact().toString().equals("io.micronaut:micronaut-websocket:3.6.0")).collect(Collectors.toList()); - assertFalse("Implied dependency is present", deps.isEmpty()); - - Dependency rd = null; - for (Dependency d : deps) { - srcLoc = r.getDeclarationRange(d, null); - if (srcLoc != null) { - assertNotNull("4th party artifact should not have null location", srcLoc); - assertNotNull("4th party artifacts should report 'implied'", srcLoc.getImpliedBy()); - for (rd = d.getParent(); rd.getParent() != r.getRoot(); rd = rd.getParent() ) ; - break; - } - } - assertNotNull("Implied dependency should have a root dep", rd); - assertSame(rd, srcLoc.getImpliedBy()); } private void assertContainsDependency(List deps, String groupAndArtifact) { assertFalse("dependency list was empty", deps.isEmpty()); for (Dependency d : deps) { - ArtifactSpec a = d.getArtifact(); + ArtifactSpec a = d.getArtifact(); if (a != null) { String ga = a.getGroupId() + ":" + a.getArtifactId(); if (groupAndArtifact.equals(ga)) { @@ -270,16 +237,6 @@ private void assertContainsDependency(List deps, String groupAndArti fail("Artifact not found: " + groupAndArtifact); } - private static final List ALL_DEPS = List.of( - "io.micronaut:micronaut-http-validation", - "io.micronaut:micronaut-http-client", - "io.micronaut:micronaut-jackson-databind", - "jakarta.annotation:jakarta.annotation-api", - "ch.qos.logback:logback-classic", - "io.micronaut:micronaut-validation", - "org.apache.logging.log4j:log4j-core" - ); - public void testMicronautProjectDeclaredDependencies() throws Exception { Project p = makeProject("dependencies/micronaut"); @@ -289,10 +246,16 @@ public void testMicronautProjectDeclaredDependencies() throws Exception { assertNotNull("Dependency service is supported", r); List deps = r.getRoot().getChildren(); - for (String d : ALL_DEPS) { - assertContainsDependency(deps, d); - } + List.of( + "io.micronaut:micronaut-http-validation", + "io.micronaut:micronaut-http-client-jdk", + "io.micronaut.serde:micronaut-serde-jackson", + "jakarta.annotation:jakarta.annotation-api", + "ch.qos.logback:logback-classic", + "io.micronaut.validation:micronaut-validation", + "org.apache.logging.log4j:log4j-core" + ).forEach(dep -> assertContainsDependency(deps, dep)); - assertTrue("Contains versioned log4j dependency", deps.stream().filter(d -> d.getArtifact().toString().contains(".log4j:log4j-core:2.17.0")).findAny().isPresent()); + assertTrue("Contains versioned log4j dependency", deps.stream().filter(d -> d.getArtifact().toString().contains(".log4j:log4j-core:2")).findAny().isPresent()); } } diff --git a/java/gradle.test/nbproject/project.xml b/java/gradle.test/nbproject/project.xml index b796e54b21b0..557285ca97dd 100644 --- a/java/gradle.test/nbproject/project.xml +++ b/java/gradle.test/nbproject/project.xml @@ -122,8 +122,8 @@ org.netbeans.modules.libs.gradle - 8 - 8.0.1 + 9 + 9.3