When the Java platform is set to JDK 1.7 in the project settings, there appears to be a serious regression with generics and type inference in NB 8.2 RC.
public abstract class Example
public void foo(Collection<? extends Number> numbers)
Collection<Number> copy = copyOf(numbers);
public abstract <E> Collection<E> copyOf(Collection<? extends E> coll);
This compiles without errors on JDK 1.7, but NetBeans shows an error in the editor on the statement in foo():
incompatible types: Collection<CAP#1> cannot be converted to Collection<Number>
where CAP#1 is a fresh type-variable:
CAP#1 extends Number from capture of ? extends Number
This doesn't happen on NetBeans 8.1.
reproducible with NetBeans 8.2, Ubuntu 16.04.01 64bit and Oracle JDK 7 64bit
Setting this to P1 because it basically makes NetBeans 8.2 unusable with JDK 1.7.
I have also noticed the same bug and it's easily reproducible with this simple test case:
public class Test
public void test1()
Map<String, Object> map = new HashMap<>(test2());
public Map<String, ?> test2()
Map<String, ?> map = new HashMap<>();
In NetBeans the statement in method test1() is underlined in red but it compiles just fine!
Affects Compile on Save; the class contains auto-generated throw RuntimeException at the place of the reported error.
Possibly javac regression: for Source = 1.8 the compiler works OK. When source is < 1.8, types are evaluated incorrectly.
Note that javac compiler team may see this P1 as 'no issue' - see https://bugs.openjdk.java.net/browse/JDK-8075793
I can reproduce this as well in 8.2, both in my codebase and the attached example from matthies.
My Java version is OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-0ubuntu188.8.131.52-b13), but I am targeting 1.6 via Maven.
It is not an issue in Netbeans 8.1, netbeans-trunk-nightly-201701300002-javase-linux, or when 1.8 is targeted.
Ok so I did some more digging on this and it's actually Javac emitting these warnings when to DiagnosticListenerImpl when -source is not 1.8 (only changing that option via code). Not sure why it's not doing this in 8.1 though. Is netbeans packaging it's own com.sun.tools.javac?
I see that there is indeed nb-javac.
Not sure I'm skilled enough to drill down and find where the issue was introduced there however - hg merges confuse me.
JDK bug is fixed http://hg.openjdk.java.net/jdk9/jdk9/langtools/rev/49170d831308 and the fix is already in nb-javac http://hg.netbeans.org/main/nb-javac/rev/49170d831308. The problem is fixed in current dev. build of NetBeans.
Thanks for the link Tomas.
I realise it is currently fixed in nightly, however I am requesting that this fix please be backported and released as it makes Netbeans 8.2 essentially unusable for development with source < 8.
Unfortunately, the recent changes to nb-javac (e.g. jdk9 modules support) prevent us from safely backporting any non trivial changes from dev to NB 8.2. Please use the current NB Development Build.