diff --git a/platform/syntax/syntax-api/api-dump-experimental.txt b/platform/syntax/syntax-api/api-dump-experimental.txt index e7bbeb32820c..5294c4600f57 100644 --- a/platform/syntax/syntax-api/api-dump-experimental.txt +++ b/platform/syntax/syntax-api/api-dump-experimental.txt @@ -32,8 +32,11 @@ - containsAll(java.util.Collection):Z - f:containsNullable(com.intellij.platform.syntax.SyntaxElementType):Z - getSize():I +- f:intersect(com.intellij.platform.syntax.SyntaxElementTypeSet):com.intellij.platform.syntax.SyntaxElementTypeSet - isEmpty():Z - iterator():java.util.Iterator +- f:minus(com.intellij.platform.syntax.SyntaxElementType):com.intellij.platform.syntax.SyntaxElementTypeSet +- f:minus(java.lang.Iterable):com.intellij.platform.syntax.SyntaxElementTypeSet - f:plus(com.intellij.platform.syntax.SyntaxElementType):com.intellij.platform.syntax.SyntaxElementTypeSet - f:plus(java.lang.Iterable):com.intellij.platform.syntax.SyntaxElementTypeSet - remove(java.lang.Object):Z diff --git a/platform/syntax/syntax-api/src/com/intellij/platform/syntax/SyntaxElementTypeSet.kt b/platform/syntax/syntax-api/src/com/intellij/platform/syntax/SyntaxElementTypeSet.kt index ccbe05e70cae..905516dad3ab 100644 --- a/platform/syntax/syntax-api/src/com/intellij/platform/syntax/SyntaxElementTypeSet.kt +++ b/platform/syntax/syntax-api/src/com/intellij/platform/syntax/SyntaxElementTypeSet.kt @@ -68,4 +68,21 @@ class SyntaxElementTypeSet internal constructor( if (other in this) return this return setOf(*tokens, other).asSyntaxElementTypeSet() } + + operator fun minus(other: Iterable): SyntaxElementTypeSet { + val newSet = tokens.toSet() - other.toSet() + if (newSet.size == size) return this // no removed elements + return newSet.asSyntaxElementTypeSet() + } + + operator fun minus(other: SyntaxElementType): SyntaxElementTypeSet { + if (other !in this) return this + return (setOf(*tokens) - other).asSyntaxElementTypeSet() + } + + fun intersect(other: SyntaxElementTypeSet): SyntaxElementTypeSet { + val newSet = tokens.toSet().intersect(other) + if (newSet.size == size) return this // no removed elements + return newSet.asSyntaxElementTypeSet() + } } \ No newline at end of file