From c7cfcdeb3d50edf94ab9bb05a0b5a15d0c40eb08 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Mon, 12 May 2025 14:15:31 +0200 Subject: [PATCH] IJPL-162853 more utilities for SyntaxElementTypeSet GitOrigin-RevId: 2c898262f6c425dea65ebdecfebe76ae9340ef7c --- .../syntax/syntax-api/api-dump-experimental.txt | 3 +++ .../platform/syntax/SyntaxElementTypeSet.kt | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) 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