Skip to content

JDT issue in spring-security project#4868

Open
snjeza wants to merge 2 commits into
eclipse-jdt:masterfrom
snjeza:issue-4867
Open

JDT issue in spring-security project#4868
snjeza wants to merge 2 commits into
eclipse-jdt:masterfrom
snjeza:issue-4867

Conversation

@snjeza

@snjeza snjeza commented Feb 22, 2026

Copy link
Copy Markdown
Contributor

@eclipse-jdt-bot

Copy link
Copy Markdown
Contributor

This pull request changes some projects for the first time in this development cycle.
Therefore the following files need a version increment:

org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF
org.eclipse.jdt.core.compiler.batch/pom.xml
org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
org.eclipse.jdt.core.tests.compiler/pom.xml

An additional commit containing all the necessary changes was pushed to the top of this PR's branch. To obtain these changes (for example if you want to push more changes) either fetch from your fork or apply the git patch.

Git patch
From c47784f7ef3724ed150b98bf2cfde7ebde22446b Mon Sep 17 00:00:00 2001
From: Eclipse JDT Bot <jdt-bot@eclipse.org>
Date: Sat, 28 Feb 2026 00:10:25 +0000
Subject: [PATCH] Version bump(s) for 4.40 stream


diff --git a/org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF
index 915d7eef49..f1e166fde4 100644
--- a/org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main
 Bundle-ManifestVersion: 2
 Bundle-Name: Eclipse Compiler for Java(TM)
 Bundle-SymbolicName: org.eclipse.jdt.core.compiler.batch
-Bundle-Version: 3.45.0.qualifier
+Bundle-Version: 3.45.100.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: Eclipse.org
 Automatic-Module-Name: org.eclipse.jdt.core.compiler.batch
diff --git a/org.eclipse.jdt.core.compiler.batch/pom.xml b/org.eclipse.jdt.core.compiler.batch/pom.xml
index ce59619b2e..f0801f9261 100644
--- a/org.eclipse.jdt.core.compiler.batch/pom.xml
+++ b/org.eclipse.jdt.core.compiler.batch/pom.xml
@@ -17,7 +17,7 @@
     <version>4.40.0-SNAPSHOT</version>
   </parent>
   <artifactId>org.eclipse.jdt.core.compiler.batch</artifactId>
-  <version>3.45.0-SNAPSHOT</version>
+  <version>3.45.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <properties>
diff --git a/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
index fac3896ca2..5b4a64c99a 100644
--- a/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.core.tests.compiler;singleton:=true
-Bundle-Version: 3.13.1100.qualifier
+Bundle-Version: 3.13.1200.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.core.tests.compiler,
diff --git a/org.eclipse.jdt.core.tests.compiler/pom.xml b/org.eclipse.jdt.core.tests.compiler/pom.xml
index 970f875921..21ba83b32e 100644
--- a/org.eclipse.jdt.core.tests.compiler/pom.xml
+++ b/org.eclipse.jdt.core.tests.compiler/pom.xml
@@ -19,7 +19,7 @@
     <relativePath>../tests-pom/</relativePath>
   </parent>
   <artifactId>org.eclipse.jdt.core.tests.compiler</artifactId>
-  <version>3.13.1100-SNAPSHOT</version>
+  <version>3.13.1200-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
   <properties>
-- 
2.53.0

Further information are available in Common Build Issues - Missing version increments.

@snjeza snjeza force-pushed the issue-4867 branch 3 times, most recently from 3d5d641 to aa12b13 Compare March 3, 2026 13:48
@stephan-herrmann stephan-herrmann added the javac ecj not compatible with javac label Jun 16, 2026
@stephan-herrmann

Copy link
Copy Markdown
Contributor

With recent improvements in type inference and with javac instrumented for tracing (#4838) we should now be in a better position to understand how exactly compilers differ regarding #4867.

@srikanth-sankaran

Copy link
Copy Markdown
Contributor

With recent improvements in type inference and with javac instrumented for tracing (#4838) we should now be in a better position to understand how exactly compilers differ regarding #4867.

This is the trace log as of now:

/home/srikanth/jdk/jdk/build/linux-x86_64-server-release/images/jdk/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:45979,suspend=y,server=n --enable-preview -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath /home/srikanth/intellij/idea-IU-261.25134.95/lib/idea_rt.jar com.sun.tools.javac.Main -g -cp /home/srikanth/tmp -XDdebug.dumpInferenceGraphsTo=/home/srikanth/tmp/javac-inference-trace /home/srikanth/tmp/X.java
Connected to the target VM, address: '127.0.0.1:45979', transport: 'socket'
« <?...> any(...)»
« <?...> any(...)»---------------- Inferring types for call to any ----------------
« <?...> any(...)»    Mode: Speculative
« <?...> any(...)»    Phase: Strict Invocation
« <?...> any(...)»    Method: <T> any()T
« <?...> any(...)»    Argument types: <NONE>
« <?...> any(...)»    Invocation: ArgumentMatchers.any()
« <?...> any(...)»--------------------------------------------------------------------
« <?...> any(...)»
« <?...> any(...)»---------------- Initial Bound Set (B0): ---------------
« <?...> any(...)»
« <?...> any(...)»        Inference variable = T 
« <?...> any(...)»
« <?...> any(...)»---------------- Begin Invocation Applicability Inference ---------------------
« <?...> any(...)»
« <?...> any(...)»
« <?...> any(...)»---------------- Bound set after Invocation Applicability Inference (B2): <Ditto>
« <?...> any(...)»
« <?...> any(...)»---------------------  Proceeding to solve ------
« <?...> any(...)»
« <?...> any(...)»-------------  Inference variables to be solved: T
« <?...> any(...)»
« <?...> any(...)»**** Instantiating T to be java.lang.Object during inference step: UPPER
« <?...> any(...)»-------------   Performing graph inference step EQ_LOWER_THROWS_UPPER_CAPTURED ----------
« <?...> any(...)»
« <?...> any(...)»
« <?...> any(...)»---------------- Bound set after resolution -------
« <?...> any(...)»
« <?...> any(...)»        Inference variable = T instantiation = java.lang.Object 
« <?...> any(...)»    Instantiated Method Type : ()java.lang.Object
« <?...> any(...)»-----------------------------------------------

« <?...> any(...)»
« <?...> any(...)»---------------- Inferring types for call to any ----------------
« <?...> any(...)»    Mode: Speculative
« <?...> any(...)»    Phase: Strict Invocation
« <?...> any(...)»    Method: <T> any()T
« <?...> any(...)»    Argument types: <NONE>
« <?...> any(...)»    Invocation: ArgumentMatchers.any()
« <?...> any(...)»--------------------------------------------------------------------
« <?...> any(...)»
« <?...> any(...)»---------------- Initial Bound Set (B0): ---------------
« <?...> any(...)»
« <?...> any(...)»        Inference variable = T 
« <?...> any(...)»
« <?...> any(...)»---------------- Begin Invocation Applicability Inference ---------------------
« <?...> any(...)»
« <?...> any(...)»
« <?...> any(...)»---------------- Bound set after Invocation Applicability Inference (B2): <Ditto>
« <?...> any(...)»

« <?...> any(...)»
« <?...> any(...)»---------------- Inferring types for call to any ----------------
« <?...> any(...)»    Mode: Speculative
« <?...> any(...)»    Phase: Strict Invocation
« <?...> any(...)»    Method: <T> any()T
« <?...> any(...)»    Argument types: <NONE>
« <?...> any(...)»    Invocation: ArgumentMatchers.any()
« <?...> any(...)»--------------------------------------------------------------------
« <?...> any(...)»
« <?...> any(...)»---------------- Initial Bound Set (B0): ---------------
« <?...> any(...)»
« <?...> any(...)»        Inference variable = T 
« <?...> any(...)»
« <?...> any(...)»---------------- Begin Invocation Applicability Inference ---------------------
« <?...> any(...)»
« <?...> any(...)»
« <?...> any(...)»---------------- Bound set after Invocation Applicability Inference (B2): <Ditto>
« <?...> any(...)»
« <?...> any(...)»---------------------  Proceeding to solve ------
« <?...> any(...)»
« <?...> any(...)»-------------  Inference variables to be solved: T
« <?...> any(...)»
« <?...> any(...)»**** Instantiating T to be java.lang.Object during inference step: UPPER
« <?...> any(...)»-------------   Performing graph inference step EQ_LOWER_THROWS_UPPER_CAPTURED ----------
« <?...> any(...)»
« <?...> any(...)»
« <?...> any(...)»---------------- Bound set after resolution -------
« <?...> any(...)»
« <?...> any(...)»        Inference variable = T instantiation = java.lang.Object 
« <?...> any(...)»    Instantiated Method Type : ()java.lang.Object
« <?...> any(...)»-----------------------------------------------

« <?...> any(...)»
« <?...> any(...)»---------------- Inferring types for call to any ----------------
« <?...> any(...)»    Mode: Final
« <?...> any(...)»    Phase: Strict Invocation
« <?...> any(...)»    Method: <T> any()T
« <?...> any(...)»    Argument types: <NONE>
« <?...> any(...)»    Invocation: ArgumentMatchers.any()
« <?...> any(...)»--------------------------------------------------------------------
« <?...> any(...)»
« <?...> any(...)»---------------- Initial Bound Set (B0): ---------------
« <?...> any(...)»
« <?...> any(...)»        Inference variable = T 
« <?...> any(...)»
« <?...> any(...)»---------------- Begin Invocation Applicability Inference ---------------------
« <?...> any(...)»
« <?...> any(...)»
« <?...> any(...)»---------------- Bound set after Invocation Applicability Inference (B2): <Ditto>
« <?...> any(...)»
« <?...> any(...)»    Bound set after incorporation: <Ditto>
« <?...> any(...)»---------------------   Begin generate return constraints ---------------------
« <?...> any(...)»        Add bound  T <: Message<? extends capture#662 of ?>
« <?...> any(...)»                   ⇐ T <: Message<? extends capture#662 of ?>
« <?...> any(...)»                   ⇐ isSubtypeUnchecked(T,Message<? extends capture#662 of ?>)
« <?...> any(...)»                   ⇐ compatible(T,Message<? extends capture#662 of ?>)?
« <?...> any(...)»---------------- Bound set after generation of return constraints (B3):
« <?...> any(...)»        Inference variable = T 
« <?...> any(...)»            T <: Message<? extends capture#662 of ?>
« <?...> any(...)»---------------------  Proceeding to solve ------
« <?...> any(...)»
« <?...> any(...)»-------------  Inference variables to be solved: T
« <?...> any(...)»
« <?...> any(...)»**** Instantiating T to be Message<? extends capture#662 of ?> during inference step: UPPER
« <?...> any(...)»-------------   Performing graph inference step EQ_LOWER_THROWS_UPPER_CAPTURED ----------
« <?...> any(...)»
« <?...> any(...)»
« <?...> any(...)»---------------- Bound set after resolution -------
« <?...> any(...)»
« <?...> any(...)»        Inference variable = T instantiation = Message<? extends capture#662 of ?> 
« <?...> any(...)»            T <: Message<? extends capture#662 of ?>
« <?...> any(...)»    Instantiated Method Type : ()Message<? extends capture#662 of ?>
« <?...> any(...)»-----------------------------------------------



« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»---------------- Inferring types for call to requireNonNull ----------------
« <?...> requireNonNull(...)»    Mode: Speculative
« <?...> requireNonNull(...)»    Phase: Strict Invocation
« <?...> requireNonNull(...)»    Method: <T> requireNonNull(T)T
« <?...> requireNonNull(...)»    Argument types: java.lang.Object
« <?...> requireNonNull(...)»    Invocation: 
« <?...> requireNonNull(...)»public class X {
« <?...> requireNonNull(...)»    
« <?...> requireNonNull(...)»    public X() {
« <?...> requireNonNull(...)»        super();
« <?...> requireNonNull(...)»    }
« <?...> requireNonNull(...)»    MessageMatcher matcher = new X$1(this);
« <?...> requireNonNull(...)»    
« <?...> requireNonNull(...)»    public boolean voteGranted() {
« <?...> requireNonNull(...)»        return this.matcher.matcher((Message)ArgumentMatchers.any());
« <?...> requireNonNull(...)»    }
« <?...> requireNonNull(...)»}
« <?...> requireNonNull(...)»--------------------------------------------------------------------
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»---------------- Initial Bound Set (B0): ---------------
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»        Inference variable = T 
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»---------------- Begin Invocation Applicability Inference ---------------------
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»        Add bound  T :> java.lang.Object
« <?...> requireNonNull(...)»                   ⇐ T :> java.lang.Object
« <?...> requireNonNull(...)»                   ⇐ java.lang.Object <: T
« <?...> requireNonNull(...)»                   ⇐ isSubtypeUnchecked(java.lang.Object,T)
« <?...> requireNonNull(...)»                   ⇐ compatible(java.lang.Object,T)?
« <?...> requireNonNull(...)»                   ⇐ check actual type java.lang.Object against formal type T
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»---------------- Bound set after Invocation Applicability Inference (B2): 
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»        Inference variable = T 
« <?...> requireNonNull(...)»            T :> java.lang.Object
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»---------------------  Proceeding to solve ------
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»-------------  Inference variables to be solved: T
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»**** Instantiating T to be java.lang.Object during inference step: LOWER
« <?...> requireNonNull(...)»-------------   Performing graph inference step EQ_LOWER ----------
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»---------------- Bound set after resolution -------
« <?...> requireNonNull(...)»
« <?...> requireNonNull(...)»        Inference variable = T instantiation = java.lang.Object 
« <?...> requireNonNull(...)»            T :> java.lang.Object
« <?...> requireNonNull(...)»    Instantiated Method Type : (java.lang.Object)java.lang.Object
« <?...> requireNonNull(...)»-----------------------------------------------

Disconnected from the target VM, address: '127.0.0.1:45979', transport: 'socket'

Process finished with exit code 0

@srikanth-sankaran

Copy link
Copy Markdown
Contributor
requireNonNull(...)»---------------- Inferring types for call to requireNonNull ---------------- « requireNonNull(...)» Mode: Speculative « requireNonNull(...)» Phase: Strict Invocation « requireNonNull(...)» Method: requireNonNull(T)T « requireNonNull(...)» Argument types: java.lang.Object « requireNonNull(...)» Invocation: « requireNonNull(...)»public class X { « requireNonNull(...)» « requireNonNull(...)» public X() { « requireNonNull(...)» super(); « requireNonNull(...)» } « requireNonNull(...)» MessageMatcher matcher = new X$1(this); « requireNonNull(...)» « requireNonNull(...)» public boolean voteGranted() { « requireNonNull(...)» return this.matcher.matcher((Message)ArgumentMatchers.any()); « requireNonNull(...)» } « requireNonNull(...)»}

This looks like something coming from internal AST transformation - I don't see a requireNonNull call in the source code at all.

Javac is designed with so many internal AST transformations being the central pattern, so this is not surprising, but should be eliminated from the trace as it does not add value for us.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

javac ecj not compatible with javac

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JDT issue in spring-security project

4 participants