diff --git a/java/beans/src/org/netbeans/modules/beans/addproperty/AddPropertyCodeGenerator.java b/java/beans/src/org/netbeans/modules/beans/addproperty/AddPropertyCodeGenerator.java index 64dcd804fac7..be0c4f77ba8b 100644 --- a/java/beans/src/org/netbeans/modules/beans/addproperty/AddPropertyCodeGenerator.java +++ b/java/beans/src/org/netbeans/modules/beans/addproperty/AddPropertyCodeGenerator.java @@ -29,6 +29,7 @@ import com.sun.source.util.Trees; import java.io.IOException; import java.util.Collections; +import java.util.EnumSet; import java.util.LinkedList; import java.util.List; import javax.lang.model.element.Element; @@ -92,10 +93,12 @@ public AddPropertyCodeGenerator(JTextComponent component, String className, List this.vcsName = vcsName; } + @Override public String getDisplayName() { return NbBundle.getMessage(AddPropertyCodeGenerator.class, "DN_AddProperty"); } + @Override public void invoke() { Object o = component.getDocument().getProperty(Document.StreamDescriptionProperty); @@ -216,6 +219,7 @@ public void run(CompilationController parameter) throws Exception { r.lock(); try { NbDocument.runAtomicAsUser((StyledDocument) doc, new Runnable() { + @Override public void run() { try { GuardedSectionManager manager = GuardedSectionManager.getInstance((StyledDocument) doc); @@ -256,6 +260,7 @@ public void run() { // code insertion to document passed try { JavaSource.forFileObject(file).runModificationTask(new Task() { + @Override public void run(WorkingCopy workingCopy) throws Exception { workingCopy.toPhase(Phase.RESOLVED); @@ -352,11 +357,17 @@ public Void visitClass(ClassTree node, Void p) { public static final class Factory implements CodeGenerator.Factory { + private static final EnumSet TREE_KINDS = EnumSet.copyOf(TreeUtilities.CLASS_TREE_KINDS); + static { + TREE_KINDS.remove(Tree.Kind.RECORD); // no fields in records + } + + @Override public List create(Lookup context) { JTextComponent component = context.lookup(JTextComponent.class); CompilationController cc = context.lookup(CompilationController.class); TreePath path = context.lookup(TreePath.class); - while (path != null && !TreeUtilities.CLASS_TREE_KINDS.contains(path.getLeaf().getKind())) { + while (path != null && !TREE_KINDS.contains(path.getLeaf().getKind())) { path = path.getParentPath(); } diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/EqualsHashCodeGenerator.java b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/EqualsHashCodeGenerator.java index 51cec2cd09f7..b02742fe6e74 100644 --- a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/EqualsHashCodeGenerator.java +++ b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/EqualsHashCodeGenerator.java @@ -152,7 +152,7 @@ public String getDisplayName() { } static EqualsHashCodeGenerator createEqualsHashCodeGenerator(JTextComponent component, CompilationController cc, Element el) throws IOException { - if (el.getKind() != ElementKind.CLASS) { + if (el.getKind() != ElementKind.CLASS && el.getKind() != ElementKind.RECORD) { return null; } //#125114: ignore anonymous innerclasses: @@ -410,9 +410,7 @@ public static void generateEqualsAndHashCode(WorkingCopy wc, TreePath path, Iter if (!dt.getTypeArguments().isEmpty()) { WildcardType wt = wc.getTypes().getWildcardType(null, null); TypeMirror[] typeArgs = new TypeMirror[dt.getTypeArguments().size()]; - for (int i = 0; i < typeArgs.length; i++) { - typeArgs[i] = wt; - } + Arrays.fill(typeArgs, wt); dt = dt.getEnclosingType().getKind() == TypeKind.DECLARED ? wc.getTypes().getDeclaredType((DeclaredType)dt.getEnclosingType(), te, typeArgs) : wc.getTypes().getDeclaredType(te, typeArgs); diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/GeneratorUtils.java b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/GeneratorUtils.java index a6cb7fd50a03..423bd41af052 100644 --- a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/GeneratorUtils.java +++ b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/GeneratorUtils.java @@ -43,11 +43,9 @@ import javax.lang.model.type.TypeMirror; import javax.swing.JButton; import javax.swing.JComponent; -import javax.swing.text.Document; import javax.swing.text.JTextComponent; import org.netbeans.api.annotations.common.NonNull; -import org.netbeans.api.java.source.CodeStyle; import org.netbeans.api.java.source.CompilationInfo; import org.netbeans.api.java.source.ElementUtilities; import org.netbeans.api.java.source.GeneratorUtilities; @@ -58,7 +56,6 @@ import org.netbeans.editor.Utilities; import org.openide.DialogDescriptor; import org.openide.ErrorManager; -import org.openide.filesystems.FileObject; import org.openide.util.NbBundle; /** diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/GetterSetterGenerator.java b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/GetterSetterGenerator.java index 34f9b97dbcd7..1f2f68d4d462 100644 --- a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/GetterSetterGenerator.java +++ b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/GetterSetterGenerator.java @@ -18,6 +18,7 @@ */ package org.netbeans.modules.java.editor.codegen; +import com.sun.source.tree.Tree; import java.awt.Dialog; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -62,6 +63,11 @@ */ public class GetterSetterGenerator implements CodeGenerator { + private static final EnumSet TREE_KINDS = EnumSet.copyOf(TreeUtilities.CLASS_TREE_KINDS); + static { + TREE_KINDS.remove(Tree.Kind.RECORD); // no getters/setters for records + } + public static class Factory implements CodeGenerator.Factory { private static final String ERROR = ""; //NOI18N @@ -76,7 +82,7 @@ public List create(Lookup context) { } CodeStyle codeStyle = CodeStyle.getDefault(component.getDocument()); TreePath path = context.lookup(TreePath.class); - path = controller.getTreeUtilities().getPathElementOfKind(TreeUtilities.CLASS_TREE_KINDS, path); + path = controller.getTreeUtilities().getPathElementOfKind(TREE_KINDS, path); if (path == null) { return ret; } @@ -214,7 +220,7 @@ public void run(WorkingCopy copy) throws IOException { copy.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED); Element e = description.getElementHandle().resolve(copy); TreePath path = e != null ? copy.getTrees().getPath(e) : copy.getTreeUtilities().pathFor(caretOffset); - path = copy.getTreeUtilities().getPathElementOfKind(TreeUtilities.CLASS_TREE_KINDS, path); + path = copy.getTreeUtilities().getPathElementOfKind(TREE_KINDS, path); if (path == null) { String message = NbBundle.getMessage(GetterSetterGenerator.class, "ERR_CannotFindOriginalClass"); //NOI18N org.netbeans.editor.Utilities.setStatusBoldText(component, message); diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ImplementOverrideMethodGenerator.java b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ImplementOverrideMethodGenerator.java index 9b0460bb0929..435cf1e08d3d 100644 --- a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ImplementOverrideMethodGenerator.java +++ b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ImplementOverrideMethodGenerator.java @@ -35,7 +35,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.BiFunction; -import java.util.function.Function; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; @@ -193,6 +192,7 @@ public List> get() throws InterruptedExceptio } } + @Override public void run() { List> tmp; if (testOverrideMethodsSelection != null) { diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ToStringGenerator.java b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ToStringGenerator.java index a0dbf39793d1..e39c2ba0c944 100644 --- a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ToStringGenerator.java +++ b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ToStringGenerator.java @@ -116,11 +116,13 @@ static ToStringGenerator createToStringGenerator(JTextComponent component, Compi for (Element element : typeElement.getEnclosedElements()) { switch (element.getKind()) { case METHOD: - if (element.getSimpleName().contentEquals("toString") && ((ExecutableElement) element).getParameters().isEmpty()) { //NOI18N + if (element.getSimpleName().contentEquals("toString") && ((ExecutableElement) element).getParameters().isEmpty() //NOI18N + && !controller.getElementUtilities().isSynthetic(element)) { // e.g record return null; } break; case FIELD: +// case RECORD_COMPONENT: // record components will show up as fields for some reason if (!ERROR.contentEquals(element.getSimpleName()) && !element.getModifiers().contains(Modifier.STATIC)) { descriptions.add(ElementNode.Description.create(controller, element, null, true, true)); } diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ui/ElementNode.java b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ui/ElementNode.java index 8f8ff4df3bda..522f505ed4dd 100644 --- a/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ui/ElementNode.java +++ b/java/java.editor/src/org/netbeans/modules/java/editor/codegen/ui/ElementNode.java @@ -155,7 +155,7 @@ public static class Description { private List subs; private String htmlHeader; private boolean isSelected; - private boolean isSelectable; + private final boolean isSelectable; public static Description create(List subs) { return new Description("", null, null, subs, null, false, false); // NOI18N @@ -168,6 +168,7 @@ public static Description create(CompilationInfo info, Element element, List { + @Override public int compare(Description d1, Description d2) { if ( k2i(d1.elementHandle.getKind()) != k2i(d2.elementHandle.getKind()) ) { diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/overridden/ComputeOverriders.java b/java/java.editor/src/org/netbeans/modules/java/editor/overridden/ComputeOverriders.java index df60a474422c..97e274d1e2dc 100644 --- a/java/java.editor/src/org/netbeans/modules/java/editor/overridden/ComputeOverriders.java +++ b/java/java.editor/src/org/netbeans/modules/java/editor/overridden/ComputeOverriders.java @@ -19,8 +19,6 @@ package org.netbeans.modules.java.editor.overridden; -import java.awt.Point; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.util.ArrayList; @@ -58,7 +56,6 @@ import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.URLMapper; import org.openide.util.Exceptions; import org.openide.util.Lookup; @@ -553,22 +550,7 @@ private static Map> getDependencies(boolean binary) { Method dependenciesMethod = clazz.getDeclaredMethod(method); return (Map>) dependenciesMethod.invoke(instance); - } catch (IllegalAccessException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (IllegalArgumentException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (InvocationTargetException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (NoSuchMethodException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (SecurityException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (ClassCastException ex) { + } catch (ReflectiveOperationException | IllegalArgumentException | SecurityException | ClassCastException ex) { Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); return null; } @@ -604,22 +586,7 @@ private static Map> getRootPeers() { Method peersMethod = clazz.getDeclaredMethod(method); return (Map>) peersMethod.invoke(instance); - } catch (IllegalAccessException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (IllegalArgumentException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (InvocationTargetException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (NoSuchMethodException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (SecurityException ex) { - Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); - return null; - } catch (ClassCastException ex) { + } catch (ReflectiveOperationException | IllegalArgumentException | SecurityException | ClassCastException ex) { Logger.getLogger(GoToImplementation.class.getName()).log(Level.FINE, null, ex); return null; } diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.7/OverrideAbstractList2b.pass2 b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.7/OverrideAbstractList2b.pass2 index 186368c2fc63..82366726ade5 100644 --- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.7/OverrideAbstractList2b.pass2 +++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.7/OverrideAbstractList2b.pass2 @@ -8,7 +8,7 @@ public class Test extends AbstractList { @Override public T get(int arg0) { - throw new UnsupportedOperationException("Not supported yet."); + return null; } } diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.7/OverrideAbstractList3b.pass2 b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.7/OverrideAbstractList3b.pass2 index afe8ab48e4ed..afdebfa5d64f 100644 --- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.7/OverrideAbstractList3b.pass2 +++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.7/OverrideAbstractList3b.pass2 @@ -8,7 +8,7 @@ public class Test extends AbstractList { @Override public String get(int arg0) { - throw new UnsupportedOperationException("Not supported yet."); + return null; } } diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.8/OverrideAbstractList2b.pass2 b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.8/OverrideAbstractList2b.pass2 index 186368c2fc63..82366726ade5 100644 --- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.8/OverrideAbstractList2b.pass2 +++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.8/OverrideAbstractList2b.pass2 @@ -8,7 +8,7 @@ public class Test extends AbstractList { @Override public T get(int arg0) { - throw new UnsupportedOperationException("Not supported yet."); + return null; } } diff --git a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.8/OverrideAbstractList3b.pass2 b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.8/OverrideAbstractList3b.pass2 index afe8ab48e4ed..afdebfa5d64f 100644 --- a/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.8/OverrideAbstractList3b.pass2 +++ b/java/java.editor/test/unit/data/goldenfiles/org/netbeans/modules/java/editor/completion/JavaCompletionProviderTest/1.8/OverrideAbstractList3b.pass2 @@ -8,7 +8,7 @@ public class Test extends AbstractList { @Override public String get(int arg0) { - throw new UnsupportedOperationException("Not supported yet."); + return null; } } diff --git a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint11.pass b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint11.pass index 7c8b99f52b09..f21f56b36aca 100644 --- a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint11.pass +++ b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint11.pass @@ -8,7 +8,7 @@ public class ImplementAbstractMethods11 { a(new Comparator() { public int compare(Object t, Object t1) { - throw new UnsupportedOperationException("Not supported yet."); + return 0; } }); } diff --git a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint4.pass b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint4.pass index 5e1493b0c84f..904d9b7b2637 100644 --- a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint4.pass +++ b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint4.pass @@ -22,7 +22,7 @@ public class ImplementAbstractMethods4 extends AbstractClass2 { } @Override public String[] test(int[] x, String[] y, String... args) throws IOException, BadLocationException { - throw new UnsupportedOperationException("Not supported yet."); + return null; } } diff --git a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint5.pass b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint5.pass index a8ab89c7664f..648208c023a3 100644 --- a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint5.pass +++ b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint5.pass @@ -24,7 +24,7 @@ public class ImplementAbstractMethods5 extends AbstractClass3 { } @Override public String[] test(Map> l) throws IOException, BadLocationException { - throw new UnsupportedOperationException("Not supported yet."); + return null; } } diff --git a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint7.pass b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint7.pass index d7b13cbd52ed..9fa4146e0968 100644 --- a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint7.pass +++ b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementAbstractMethodsHint7.pass @@ -18,15 +18,15 @@ public class ImplementAbstractMethods7 extends ImplementAbstractMethods7Usee2 @Override protected boolean resolve() { - throw new UnsupportedOperationException("Not supported yet."); + return false; } public String doStuff() { - throw new UnsupportedOperationException("Not supported yet."); + return null; } public int resolveStuff(JButton button) { - throw new UnsupportedOperationException("Not supported yet."); + return 0; } } diff --git a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementDefaultMethods1.pass b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementDefaultMethods1.pass index 6775da7770b4..ccafa39575a9 100644 --- a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementDefaultMethods1.pass +++ b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementDefaultMethods1.pass @@ -8,12 +8,12 @@ public class ImplementDefaultMethods1 implements java.util.Iterator { @Override public boolean hasNext() { - throw new UnsupportedOperationException("Not supported yet."); + return false; } @Override public String next() { - throw new UnsupportedOperationException("Not supported yet."); + return null; } } diff --git a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementDefaultMethods2.pass b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementDefaultMethods2.pass index 22963c7205c1..d727671d5763 100644 --- a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementDefaultMethods2.pass +++ b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementDefaultMethods2.pass @@ -8,12 +8,12 @@ public class ImplementDefaultMethods2 implements java.util.Iterator { @Override public boolean hasNext() { - throw new UnsupportedOperationException("Not supported yet."); + return false; } @Override public Object next() { - throw new UnsupportedOperationException("Not supported yet."); + return null; } @Override diff --git a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementEnumMethods.pass b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementEnumMethods.pass index 05d0a86f47d3..f2a4345f9b26 100644 --- a/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementEnumMethods.pass +++ b/java/java.hints/test/unit/data/goldenfiles/org/netbeans/modules/java/hints/errors/ErrorHintsTest/testImplementEnumMethods.pass @@ -9,17 +9,17 @@ public class ImplementEnumMethods { ONE { @Override public String kuk() { - throw new UnsupportedOperationException("Not supported yet."); + return null; } }, TWO { @Override public String kuk() { - throw new UnsupportedOperationException("Not supported yet."); + return null; } }, THREE { @Override public String kuk() { - throw new UnsupportedOperationException("Not supported yet."); + return null; } }; diff --git a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/CreateMethodTest.java b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/CreateMethodTest.java index 3b877260b9ac..2e8e20be0402 100644 --- a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/CreateMethodTest.java +++ b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/CreateMethodTest.java @@ -91,7 +91,7 @@ public void testCreateMethod77038() throws Exception { performFixTest("test/Test.java", "package test; public class Test {public void test() {b(test2() ? true : false);} void t(boolean b){}}", 82 - 25, "CreateMethodFix:test2()boolean:test.Test", - "package test; public class Test {public void test() {b(test2() ? true : false);} void t(boolean b){} private boolean test2() { throw new UnsupportedOperationException(\"Not supported yet.\"); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody } }"); + "package test; public class Test {public void test() {b(test2() ? true : false);} void t(boolean b){} private boolean test2() { return false; // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody } }"); } public void testCreateMethod82923() throws Exception { @@ -177,7 +177,7 @@ public void test220582() throws Exception { " }\n" + " }\n" + " private boolean isNew(String name) {\n" + - " throw new UnsupportedOperationException(\"Not supported yet.\"); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + + " return false; // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + " }\n" + "}\n").replaceAll("[ \n\t\r]+", " ")); } @@ -199,7 +199,7 @@ public void test223011a() throws Exception { " Field f = method(c);\n" + " }\n" + " private Field method(Class c) {\n" + - " throw new UnsupportedOperationException(\"Not supported yet.\"); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + + " return null; // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + " }\n" + "}\n").replaceAll("[ \n\t\r]+", " ")); } @@ -221,7 +221,7 @@ public void test223011b() throws Exception { " Field f = method(c1, c2);\n" + " }\n" + " private Field method(Class c1, Class c2) {\n" + - " throw new UnsupportedOperationException(\"Not supported yet.\"); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + + " return null; // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + " }\n" + "}\n").replaceAll("[ \n\t\r]+", " ")); } @@ -243,7 +243,7 @@ public void test223011c() throws Exception { " Class cr = method(c);\n" + " }\n" + " private Class method(Class c) {\n" + - " throw new UnsupportedOperationException(\"Not supported yet.\"); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + + " return null; // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + " }\n" + "}\n").replaceAll("[ \n\t\r]+", " ")); } @@ -269,7 +269,7 @@ public void test203476() throws Exception { " getName(undefined());\n" + " }\n" + " private String undefined() {\n" + - " throw new UnsupportedOperationException(\"Not supported yet.\"); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody \n" + + " return null; // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody \n" + " }\n" + "}\n" + "class Aux {\n" + diff --git a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethodsTest.java b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethodsTest.java index 27741fc99948..2ec1fb9b179f 100644 --- a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethodsTest.java +++ b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethodsTest.java @@ -164,7 +164,7 @@ public void testEnumWithAbstractMethods() throws Exception { "\n" + " @Override\n" + " public int boo() {\n" + - " throw new UnsupportedOperationException(\"Not supported yet.\"); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + + " return 0; // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody\n" + " }\n" + " };\n" + " public abstract int boo();\n" + diff --git a/java/java.source.base/src/org/netbeans/api/java/source/ElementUtilities.java b/java/java.source.base/src/org/netbeans/api/java/source/ElementUtilities.java index 52cb14bef2fa..11001a9037d6 100644 --- a/java/java.source.base/src/org/netbeans/api/java/source/ElementUtilities.java +++ b/java/java.source.base/src/org/netbeans/api/java/source/ElementUtilities.java @@ -20,6 +20,7 @@ import com.sun.source.tree.CompilationUnitTree; import com.sun.source.tree.Scope; +import com.sun.source.tree.Tree; import com.sun.source.util.TreePath; import com.sun.source.util.Trees; import com.sun.tools.javac.api.JavacScope; @@ -169,7 +170,9 @@ public Element getImplementationOf(ExecutableElement method, TypeElement origin) * @return true if and only if the given element is synthetic, false otherwise */ public boolean isSynthetic(Element element) { - return (((Symbol) element).flags() & Flags.SYNTHETIC) != 0 || (((Symbol) element).flags() & Flags.GENERATEDCONSTR) != 0; + return (((Symbol) element).flags() & Flags.SYNTHETIC) != 0 + || (((Symbol) element).flags() & Flags.GENERATEDCONSTR) != 0 + || (((Symbol) element).flags() & Flags.GENERATED_MEMBER) != 0; } /**Returns true if the given module is open. @@ -709,6 +712,8 @@ public List findOverridableMethods(TypeElement type DeclaredType dt = (DeclaredType)type.asType(); Types types = JavacTypes.instance(ctx); Set typeStrings = new HashSet<>(); + Tree.Kind kind = info.getTrees().getTree(type).getKind(); + for (ExecutableElement ee : ElementFilter.methodsIn(info.getElements().getAllMembers(type))) { TypeMirror methodType = types.erasure(types.asMemberOf(dt, ee)); @@ -716,11 +721,14 @@ public List findOverridableMethods(TypeElement type if (typeStrings.contains(methodTypeString)) { continue; } + // javac generated record members disappear if overridden + boolean replaceable = kind == Tree.Kind.RECORD && isSynthetic(ee); + Set set = EnumSet.copyOf(notOverridable); - set.removeAll(ee.getModifiers()); + set.removeAll(ee.getModifiers()); if (set.size() == notOverridable.size() && !overridesPackagePrivateOutsidePackage(ee, type) //do not offer package private methods in case they're from different package - && !isOverridden(ee, type)) { + && (replaceable || !isOverridden(ee, type))) { overridable.add(ee); if (ee.getModifiers().contains(Modifier.ABSTRACT)) { typeStrings.add(methodTypeString); diff --git a/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java b/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java index 7aac23e9ae57..03cbf9764a32 100644 --- a/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java +++ b/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java @@ -1738,7 +1738,8 @@ private MethodTree createMethod(final ExecutableElement element, final TypeEleme if (isImplement && clazz.getKind().isInterface()) { mt = make.addModifiersModifier(mt, Modifier.DEFAULT); } - boolean isAbstract = element.getModifiers().contains(Modifier.ABSTRACT); + boolean replaceable = copy.getTrees().getTree(clazz).getKind() == Kind.RECORD && copy.getElementUtilities().isSynthetic(element); + boolean isAbstract = element.getModifiers().contains(Modifier.ABSTRACT) || replaceable; if (isImplement || clazz.getKind().isClass() && (!isAbstract || !clazz.getModifiers().contains(Modifier.ABSTRACT))) { try { bodyTemplate = "{" + readFromTemplate(isAbstract ? GENERATED_METHOD_BODY : OVERRIDDEN_METHOD_BODY, createBindings(clazz, element)) + "\n}"; //NOI18N @@ -1959,7 +1960,11 @@ private Map createBindings(TypeElement clazz, ExecutableElement default: value = "null"; //NOI18N } - bindings.put(DEFAULT_RETURN_TYPE_VALUE, value); + if (clazz != null && clazz.getKind() == ElementKind.RECORD) { + bindings.put(DEFAULT_RETURN_TYPE_VALUE, element.getSimpleName()); + } else { + bindings.put(DEFAULT_RETURN_TYPE_VALUE, value); + } } if (clazz != null && element != null) { StringBuilder sb = new StringBuilder(); diff --git a/java/java.source/src/org/netbeans/modules/java/source/resources/GeneratedMethodBody.template b/java/java.source/src/org/netbeans/modules/java/source/resources/GeneratedMethodBody.template index 39dbb917b74b..711c648c7d1d 100644 --- a/java/java.source/src/org/netbeans/modules/java/source/resources/GeneratedMethodBody.template +++ b/java/java.source/src/org/netbeans/modules/java/source/resources/GeneratedMethodBody.template @@ -1,5 +1,5 @@ <#-- -A built-in Freemarker template (see http://freemarker.sourceforge.net) used for +A built-in Freemarker template (see https://freemarker.apache.org) used for filling the body of methods generated by the IDE. When editing the template, the following predefined variables, that will be then expanded into the corresponding values, could be used together with Java expressions and @@ -10,4 +10,8 @@ ${method_name} name of the created method ${class_name} qualified name of the enclosing class ${simple_class_name} simple name of the enclosing class --> +<#if method_return_type?? && method_return_type != "void"> +return ${default_return_value}; // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody +<#else> throw new java.lang.UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody +