You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by db...@apache.org on 2022/10/12 12:47:55 UTC

[netbeans] branch master updated: Code completion after yield in switch expressions fixed. (#4769)

This is an automated email from the ASF dual-hosted git repository.

dbalek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 2662296a17 Code completion after yield in switch expressions fixed. (#4769)
2662296a17 is described below

commit 2662296a179f63e525146385d832f960d9bacac5
Author: Dusan Balek <du...@oracle.com>
AuthorDate: Wed Oct 12 14:47:47 2022 +0200

    Code completion after yield in switch expressions fixed. (#4769)
---
 .../java/completion/JavaCompletionTask.java        |  84 ++++++++--
 .../1.8/SwitchExprAfterYieldAutoCompletion.pass    | 161 +++++++++++++++++++
 ...pletion_CaseLabels_PatternMatchingSwitch_1.pass | 112 +++++++++++++
 ...pletion_CaseLabels_PatternMatchingSwitch_2.pass | 111 +++++++++++++
 ...pletion_CaseLabels_PatternMatchingSwitch_3.pass | 110 +++++++++++++
 .../10/SwitchExprAfterYieldAutoCompletion.pass     | 173 ++++++++++++++++++++
 ...pletion_CaseLabels_PatternMatchingSwitch_1.pass | 113 +++++++++++++
 ...pletion_CaseLabels_PatternMatchingSwitch_2.pass | 112 +++++++++++++
 ...pletion_CaseLabels_PatternMatchingSwitch_3.pass | 111 +++++++++++++
 .../14/SwitchExprAfterYieldAutoCompletion.pass     | 174 ++++++++++++++++++++
 .../19/SwitchExprAfterYieldAutoCompletion.pass     | 178 +++++++++++++++++++++
 .../JavaCompletionTask113FeaturesTest.java         |   8 +
 12 files changed, 1437 insertions(+), 10 deletions(-)

diff --git a/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java b/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java
index 3488952e60..422efaa3c1 100644
--- a/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java
+++ b/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java
@@ -1551,13 +1551,6 @@ public final class JavaCompletionTask<T> extends BaseTask {
         }
         localResult(env);
         addKeywordsForBlock(env);
-        
-        if (env.getController().getSourceVersion().compareTo(RELEASE_13) >= 0) {
-            TreePath parentPath = env.getPath().getParentPath();
-            if (parentPath.getLeaf().getKind() == Tree.Kind.CASE && parentPath.getParentPath().getLeaf().getKind() == Kind.SWITCH_EXPRESSION) {
-                addKeyword(env, YIELD_KEYWORD, SPACE, false);
-            }
-        }
     }
 
     @SuppressWarnings("fallthrough")
@@ -2400,9 +2393,6 @@ public final class JavaCompletionTask<T> extends BaseTask {
                     }
                     localResult(env);
                     addKeywordsForBlock(env);
-                    if (env.getController().getSourceVersion().compareTo(SourceVersion.RELEASE_13) >= 0 && path.getLeaf().getKind() == Kind.SWITCH_EXPRESSION) {
-                        addKeyword(env, YIELD_KEYWORD, SPACE, false);
-                    }
                 }
             } else {
                 TokenSequence<JavaTokenId> ts = findLastNonWhitespaceToken(env, path.getLeaf(), offset);
@@ -2782,6 +2772,12 @@ public final class JavaCompletionTask<T> extends BaseTask {
         TreePath tPath = new TreePath(path, t);
         if (t.getKind() == Tree.Kind.MODIFIERS) {
             insideModifiers(env, tPath);
+        } else if (t.getKind() == Tree.Kind.IDENTIFIER && YIELD_KEYWORD.contentEquals(((IdentifierTree) t).getName())) {
+            TreePath sPath = controller.getTreeUtilities().getPathElementOfKind(Tree.Kind.SWITCH_EXPRESSION, path);
+            if (sPath != null) {
+                localResult(env);
+                addValueKeywords(env);
+            }
         } else if (t.getKind() == Tree.Kind.MEMBER_SELECT && ERROR.contentEquals(((MemberSelectTree) t).getIdentifier())) {
             controller.toPhase(Phase.ELEMENTS_RESOLVED);
             TreePath expPath = new TreePath(tPath, ((MemberSelectTree) t).getExpression());
@@ -4745,6 +4741,7 @@ public final class JavaCompletionTask<T> extends BaseTask {
         boolean caseAdded = false;
         boolean breakAdded = false;
         boolean continueAdded = false;
+        boolean yieldAdded = false;
         TreePath tp = env.getPath();
         while (tp != null) {
             switch (tp.getLeaf().getKind()) {
@@ -4772,6 +4769,30 @@ public final class JavaCompletionTask<T> extends BaseTask {
                         results.add(itemFactory.createKeywordItem(BREAK_KEYWORD, withinLabeledStatement(env) ? null : SEMI, anchorOffset, false));
                     }
                     break;
+                case SWITCH_EXPRESSION:
+                    lastCase = null;
+                    root = env.getRoot();
+                    sourcePositions = env.getSourcePositions();
+                    for (CaseTree t : ((SwitchExpressionTree) tp.getLeaf()).getCases()) {
+                        if (sourcePositions.getStartPosition(root, t) >= env.getOffset()) {
+                            break;
+                        }
+                        lastCase = t;
+                    }
+                    if (!caseAdded && (lastCase == null || lastCase.getExpression() != null)) {
+                        caseAdded = true;
+                        if (Utilities.startsWith(CASE_KEYWORD, prefix)) {
+                            results.add(itemFactory.createKeywordItem(CASE_KEYWORD, SPACE, anchorOffset, false));
+                        }
+                        if (Utilities.startsWith(DEFAULT_KEYWORD, prefix)) {
+                            results.add(itemFactory.createKeywordItem(DEFAULT_KEYWORD, COLON, anchorOffset, false));
+                        }
+                    }
+                    if (!yieldAdded && Utilities.startsWith(YIELD_KEYWORD, prefix)) {
+                        yieldAdded = true;
+                        results.add(itemFactory.createKeywordItem(YIELD_KEYWORD, SPACE, anchorOffset, false));
+                    }
+                    break;
                 case DO_WHILE_LOOP:
                 case ENHANCED_FOR_LOOP:
                 case FOR_LOOP:
@@ -4830,6 +4851,7 @@ public final class JavaCompletionTask<T> extends BaseTask {
         TreePath tp = env.getPath();
         boolean cAdded = false;
         boolean bAdded = false;
+        boolean yAdded = false;
         while (tp != null && !(cAdded && bAdded)) {
             switch (tp.getLeaf().getKind()) {
                 case DO_WHILE_LOOP:
@@ -4846,6 +4868,12 @@ public final class JavaCompletionTask<T> extends BaseTask {
                         bAdded = true;
                     }
                     break;
+                case SWITCH_EXPRESSION:
+                    if (!yAdded && Utilities.startsWith(YIELD_KEYWORD, prefix)) {
+                        results.add(itemFactory.createKeywordItem(YIELD_KEYWORD, SPACE, anchorOffset, false));
+                        yAdded = true;
+                    }
+                    break;
             }
             tp = tp.getParentPath();
         }
@@ -5590,6 +5618,25 @@ public final class JavaCompletionTask<T> extends BaseTask {
                         }
                     }
                     return ret;
+                case SWITCH_EXPRESSION:
+                    SwitchExpressionTree sew = (SwitchExpressionTree) tree;
+                    if (sew.getExpression() != lastTree && sew.getExpression().getKind() != Tree.Kind.ERRONEOUS) {
+                        return null;
+                    }
+                    ret = new HashSet<>();
+                    types = controller.getTypes();
+                    ret.add(controller.getTypes().getPrimitiveType(TypeKind.INT));
+                    te = controller.getElements().getTypeElement("java.lang.Enum"); //NOI18N
+                    if (te != null) {
+                        ret.add(types.getDeclaredType(te));
+                    }
+                    if (controller.getSourceVersion().compareTo(SourceVersion.RELEASE_7) >= 0) {
+                        te = controller.getElements().getTypeElement("java.lang.String"); //NOI18N
+                        if (te != null) {
+                            ret.add(types.getDeclaredType(te));
+                        }
+                    }
+                    return ret;
                 case METHOD_INVOCATION:
                     MethodInvocationTree mi = (MethodInvocationTree) tree;
                     sourcePositions = env.getSourcePositions();
@@ -5967,6 +6014,23 @@ public final class JavaCompletionTask<T> extends BaseTask {
                         {
                             return null;
                         }
+                    } else if (exp.getKind() == Tree.Kind.ERRONEOUS) {
+                        Iterator<? extends Tree> it = ((ErroneousTree) exp).getErrorTrees().iterator();
+                        if (it.hasNext()) {
+                            Tree t = it.next();
+                            if (t.getKind() == Tree.Kind.IDENTIFIER && YIELD_KEYWORD.contentEquals(((IdentifierTree) t).getName())) {
+                                TreePath sPath = tu.getPathElementOfKind(Tree.Kind.SWITCH_EXPRESSION, path);
+                                if (sPath != null) {
+                                    path = sPath;
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case YIELD:
+                    TreePath sPath = tu.getPathElementOfKind(Tree.Kind.SWITCH_EXPRESSION, path);
+                    if (sPath != null) {
+                        path = sPath;
                     }
                     break;
                 case BLOCK:
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/1.8/SwitchExprAfterYieldAutoCompletion.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/1.8/SwitchExprAfterYieldAutoCompletion.pass
new file mode 100644
index 0000000000..7a14b36971
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/1.8/SwitchExprAfterYieldAutoCompletion.pass
@@ -0,0 +1,161 @@
+int a
+public native int hashCode()
+public static final int Integer.BYTES
+public static final int Integer.MAX_VALUE
+public static final int Integer.MIN_VALUE
+public static final int Integer.SIZE
+public static int Integer.bitCount(int arg0)
+public static int Integer.compare(int arg0, int arg1)
+public static int Integer.compareUnsigned(int arg0, int arg1)
+public static Integer Integer.decode(String arg0)
+public static int Integer.divideUnsigned(int arg0, int arg1)
+public static Integer Integer.getInteger(String arg0)
+public static Integer Integer.getInteger(String arg0, Integer arg1)
+public static Integer Integer.getInteger(String arg0, int arg1)
+public static int Integer.hashCode(int arg0)
+public static int Integer.highestOneBit(int arg0)
+public static int Integer.lowestOneBit(int arg0)
+public static int Integer.max(int arg0, int arg1)
+public static int Integer.min(int arg0, int arg1)
+public static int Integer.numberOfLeadingZeros(int arg0)
+public static int Integer.numberOfTrailingZeros(int arg0)
+public static int Integer.parseInt(String arg0)
+public static int Integer.parseInt(String arg0, int arg1)
+public static int Integer.parseUnsignedInt(String arg0)
+public static int Integer.parseUnsignedInt(String arg0, int arg1)
+public static int Integer.remainderUnsigned(int arg0, int arg1)
+public static int Integer.reverse(int arg0)
+public static int Integer.reverseBytes(int arg0)
+public static int Integer.rotateLeft(int arg0, int arg1)
+public static int Integer.rotateRight(int arg0, int arg1)
+public static int Integer.signum(int arg0)
+public static int Integer.sum(int arg0, int arg1)
+public static Integer Integer.valueOf(String arg0)
+public static Integer Integer.valueOf(int arg0)
+public static Integer Integer.valueOf(String arg0, int arg1)
+colors color
+protected native Object clone()
+public boolean equals(Object arg0)
+protected void finalize()
+public final native Class<?> getClass()
+public final native void notify()
+public final native void notifyAll()
+public void op(int a)
+public String toString()
+public final void wait()
+public final native void wait(long arg0)
+public final void wait(long arg0, int arg1)
+boolean
+byte
+char
+double
+false
+float
+int
+long
+new
+null
+short
+super
+this
+true
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+Integer
+InternalError
+InterruptedException
+Iterable
+LinkageError
+Long
+Math
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+Readable
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+colors
+java
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_1.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_1.pass
new file mode 100644
index 0000000000..94d510bf1d
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_1.pass
@@ -0,0 +1,112 @@
+default
+null
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+IntStream
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_2.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_2.pass
new file mode 100644
index 0000000000..b76a424913
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_2.pass
@@ -0,0 +1,111 @@
+default
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+IntStream
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_3.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_3.pass
new file mode 100644
index 0000000000..49639ae8ca
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/AutoCompletion_CaseLabels_PatternMatchingSwitch_3.pass
@@ -0,0 +1,110 @@
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+IntStream
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/SwitchExprAfterYieldAutoCompletion.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/SwitchExprAfterYieldAutoCompletion.pass
new file mode 100644
index 0000000000..ff87a7edd8
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/10/SwitchExprAfterYieldAutoCompletion.pass
@@ -0,0 +1,173 @@
+int a
+public native int hashCode()
+public static final int Integer.BYTES
+public static final int Integer.MAX_VALUE
+public static final int Integer.MIN_VALUE
+public static final int Integer.SIZE
+public static int Integer.bitCount(int arg0)
+public static int Integer.compare(int arg0, int arg1)
+public static int Integer.compareUnsigned(int arg0, int arg1)
+public static Integer Integer.decode(String arg0)
+public static int Integer.divideUnsigned(int arg0, int arg1)
+public static Integer Integer.getInteger(String arg0)
+public static Integer Integer.getInteger(String arg0, Integer arg1)
+public static Integer Integer.getInteger(String arg0, int arg1)
+public static int Integer.hashCode(int arg0)
+public static int Integer.highestOneBit(int arg0)
+public static int Integer.lowestOneBit(int arg0)
+public static int Integer.max(int arg0, int arg1)
+public static int Integer.min(int arg0, int arg1)
+public static int Integer.numberOfLeadingZeros(int arg0)
+public static int Integer.numberOfTrailingZeros(int arg0)
+public static int Integer.parseInt(String arg0)
+public static int Integer.parseInt(String arg0, int arg1)
+public static int Integer.parseInt(CharSequence arg0, int arg1, int arg2, int arg3)
+public static int Integer.parseUnsignedInt(String arg0)
+public static int Integer.parseUnsignedInt(String arg0, int arg1)
+public static int Integer.parseUnsignedInt(CharSequence arg0, int arg1, int arg2, int arg3)
+public static int Integer.remainderUnsigned(int arg0, int arg1)
+public static int Integer.reverse(int arg0)
+public static int Integer.reverseBytes(int arg0)
+public static int Integer.rotateLeft(int arg0, int arg1)
+public static int Integer.rotateRight(int arg0, int arg1)
+public static int Integer.signum(int arg0)
+public static int Integer.sum(int arg0, int arg1)
+public static Integer Integer.valueOf(String arg0)
+public static Integer Integer.valueOf(int arg0)
+public static Integer Integer.valueOf(String arg0, int arg1)
+colors color
+protected native Object clone()
+public boolean equals(Object arg0)
+protected void finalize()
+public final native Class<?> getClass()
+public final native void notify()
+public final native void notifyAll()
+public void op(int a)
+public String toString()
+public final void wait()
+public final native void wait(long arg0)
+public final void wait(long arg0, int arg1)
+boolean
+byte
+char
+double
+false
+float
+int
+long
+new
+null
+short
+super
+this
+true
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+colors
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_1.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_1.pass
new file mode 100644
index 0000000000..94f7b02274
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_1.pass
@@ -0,0 +1,113 @@
+default
+null
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+IntStream
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+Record
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_2.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_2.pass
new file mode 100644
index 0000000000..974c82f0f1
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_2.pass
@@ -0,0 +1,112 @@
+default
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+IntStream
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+Record
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_3.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_3.pass
new file mode 100644
index 0000000000..d7afe4d119
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/AutoCompletion_CaseLabels_PatternMatchingSwitch_3.pass
@@ -0,0 +1,111 @@
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+IntStream
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+Record
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/SwitchExprAfterYieldAutoCompletion.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/SwitchExprAfterYieldAutoCompletion.pass
new file mode 100644
index 0000000000..c0717cdfac
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/14/SwitchExprAfterYieldAutoCompletion.pass
@@ -0,0 +1,174 @@
+int a
+public native int hashCode()
+public static final int Integer.BYTES
+public static final int Integer.MAX_VALUE
+public static final int Integer.MIN_VALUE
+public static final int Integer.SIZE
+public static int Integer.bitCount(int arg0)
+public static int Integer.compare(int arg0, int arg1)
+public static int Integer.compareUnsigned(int arg0, int arg1)
+public static Integer Integer.decode(String arg0)
+public static int Integer.divideUnsigned(int arg0, int arg1)
+public static Integer Integer.getInteger(String arg0)
+public static Integer Integer.getInteger(String arg0, Integer arg1)
+public static Integer Integer.getInteger(String arg0, int arg1)
+public static int Integer.hashCode(int arg0)
+public static int Integer.highestOneBit(int arg0)
+public static int Integer.lowestOneBit(int arg0)
+public static int Integer.max(int arg0, int arg1)
+public static int Integer.min(int arg0, int arg1)
+public static int Integer.numberOfLeadingZeros(int arg0)
+public static int Integer.numberOfTrailingZeros(int arg0)
+public static int Integer.parseInt(String arg0)
+public static int Integer.parseInt(String arg0, int arg1)
+public static int Integer.parseInt(CharSequence arg0, int arg1, int arg2, int arg3)
+public static int Integer.parseUnsignedInt(String arg0)
+public static int Integer.parseUnsignedInt(String arg0, int arg1)
+public static int Integer.parseUnsignedInt(CharSequence arg0, int arg1, int arg2, int arg3)
+public static int Integer.remainderUnsigned(int arg0, int arg1)
+public static int Integer.reverse(int arg0)
+public static int Integer.reverseBytes(int arg0)
+public static int Integer.rotateLeft(int arg0, int arg1)
+public static int Integer.rotateRight(int arg0, int arg1)
+public static int Integer.signum(int arg0)
+public static int Integer.sum(int arg0, int arg1)
+public static Integer Integer.valueOf(String arg0)
+public static Integer Integer.valueOf(int arg0)
+public static Integer Integer.valueOf(String arg0, int arg1)
+colors color
+protected native Object clone()
+public boolean equals(Object arg0)
+protected void finalize()
+public final native Class<?> getClass()
+public final native void notify()
+public final native void notifyAll()
+public void op(int a)
+public String toString()
+public final void wait()
+public final native void wait(long arg0)
+public final void wait(long arg0, int arg1)
+boolean
+byte
+char
+double
+false
+float
+int
+long
+new
+null
+short
+super
+this
+true
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+Record
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+colors
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/19/SwitchExprAfterYieldAutoCompletion.pass b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/19/SwitchExprAfterYieldAutoCompletion.pass
new file mode 100644
index 0000000000..c37484efb9
--- /dev/null
+++ b/java/java.completion/test/unit/data/goldenfiles/org/netbeans/modules/java/completion/JavaCompletionTaskTest/19/SwitchExprAfterYieldAutoCompletion.pass
@@ -0,0 +1,178 @@
+int a
+public native int hashCode()
+public static final int Integer.BYTES
+public static final int Integer.MAX_VALUE
+public static final int Integer.MIN_VALUE
+public static final int Integer.SIZE
+public static int Integer.bitCount(int arg0)
+public static int Integer.compare(int arg0, int arg1)
+public static int Integer.compareUnsigned(int arg0, int arg1)
+public static int Integer.compress(int arg0, int arg1)
+public static Integer Integer.decode(String arg0)
+public static int Integer.divideUnsigned(int arg0, int arg1)
+public static int Integer.expand(int arg0, int arg1)
+public static Integer Integer.getInteger(String arg0)
+public static Integer Integer.getInteger(String arg0, Integer arg1)
+public static Integer Integer.getInteger(String arg0, int arg1)
+public static int Integer.hashCode(int arg0)
+public static int Integer.highestOneBit(int arg0)
+public static int Integer.lowestOneBit(int arg0)
+public static int Integer.max(int arg0, int arg1)
+public static int Integer.min(int arg0, int arg1)
+public static int Integer.numberOfLeadingZeros(int arg0)
+public static int Integer.numberOfTrailingZeros(int arg0)
+public static int Integer.parseInt(String arg0)
+public static int Integer.parseInt(String arg0, int arg1)
+public static int Integer.parseInt(CharSequence arg0, int arg1, int arg2, int arg3)
+public static int Integer.parseUnsignedInt(String arg0)
+public static int Integer.parseUnsignedInt(String arg0, int arg1)
+public static int Integer.parseUnsignedInt(CharSequence arg0, int arg1, int arg2, int arg3)
+public static int Integer.remainderUnsigned(int arg0, int arg1)
+public static int Integer.reverse(int arg0)
+public static int Integer.reverseBytes(int arg0)
+public static int Integer.rotateLeft(int arg0, int arg1)
+public static int Integer.rotateRight(int arg0, int arg1)
+public static int Integer.signum(int arg0)
+public static int Integer.sum(int arg0, int arg1)
+public static Integer Integer.valueOf(String arg0)
+public static Integer Integer.valueOf(int arg0)
+public static Integer Integer.valueOf(String arg0, int arg1)
+colors color
+protected native Object clone()
+public boolean equals(Object arg0)
+protected void finalize()
+public final native Class<?> getClass()
+public final native void notify()
+public final native void notifyAll()
+public void op(int a)
+public String toString()
+public final void wait()
+public final void wait(long arg0)
+public final void wait(long arg0, int arg1)
+boolean
+byte
+char
+double
+false
+float
+int
+long
+new
+null
+short
+super
+this
+true
+AbstractMethodError
+Appendable
+ArithmeticException
+ArrayIndexOutOfBoundsException
+ArrayStoreException
+AssertionError
+AutoCloseable
+Boolean
+BootstrapMethodError
+Byte
+CharSequence
+Character
+Class
+ClassCastException
+ClassCircularityError
+ClassFormatError
+ClassLoader
+ClassNotFoundException
+ClassValue
+CloneNotSupportedException
+Cloneable
+Comparable
+Compiler
+Deprecated
+Double
+Enum
+EnumConstantNotPresentException
+Error
+Exception
+ExceptionInInitializerError
+Float
+FunctionalInterface
+IllegalAccessError
+IllegalAccessException
+IllegalArgumentException
+IllegalCallerException
+IllegalMonitorStateException
+IllegalStateException
+IllegalThreadStateException
+IncompatibleClassChangeError
+IndexOutOfBoundsException
+InheritableThreadLocal
+InstantiationError
+InstantiationException
+Integer
+InternalError
+InterruptedException
+Iterable
+LayerInstantiationException
+LinkageError
+Long
+MatchException
+Math
+Module
+ModuleLayer
+NegativeArraySizeException
+NoClassDefFoundError
+NoSuchFieldError
+NoSuchFieldException
+NoSuchMethodError
+NoSuchMethodException
+NullPointerException
+Number
+NumberFormatException
+Object
+OutOfMemoryError
+Override
+Package
+Process
+ProcessBuilder
+ProcessHandle
+Readable
+Record
+ReflectiveOperationException
+Runnable
+Runtime
+RuntimeException
+RuntimePermission
+SafeVarargs
+SecurityException
+SecurityManager
+Short
+StackOverflowError
+StackTraceElement
+StackWalker
+StrictMath
+String
+StringBuffer
+StringBuilder
+StringIndexOutOfBoundsException
+SuppressWarnings
+System
+Test
+Thread
+ThreadDeath
+ThreadGroup
+ThreadLocal
+Throwable
+TypeNotPresentException
+UnknownError
+UnsatisfiedLinkError
+UnsupportedClassVersionError
+UnsupportedOperationException
+VerifyError
+VirtualMachineError
+Void
+WrongThreadException
+colors
+com
+java
+javax
+org
+sun
diff --git a/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask113FeaturesTest.java b/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask113FeaturesTest.java
index da74c2ca08..3fcb27f0c8 100644
--- a/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask113FeaturesTest.java
+++ b/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/JavaCompletionTask113FeaturesTest.java
@@ -53,6 +53,14 @@ public class JavaCompletionTask113FeaturesTest extends CompletionTestBase {
         performTest("SwitchExprForYieldWithValue2", 1023, "yi", "SwitchExprYieldAutoCompletion.pass", SOURCE_LEVEL);
     }
 
+    public void testSwitchExprAutoCompleteAfterYield() throws Exception {
+        performTest("SwitchExprForYieldWithValue", 1019, "yield ", "SwitchExprAfterYieldAutoCompletion.pass", SOURCE_LEVEL);
+    }
+
+    public void testSwitchExprAutoCompleteAfterYield2() throws Exception {
+        performTest("SwitchExprForYieldWithValue2", 1023, "yield ", "SwitchExprAfterYieldAutoCompletion.pass", SOURCE_LEVEL);
+    }
+
     public void noop() {
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists