Skip to content

Commit

Permalink
Merge pull request #551 from FWDekker/store-decorator-settings
Browse files Browse the repository at this point in the history
Ensure decorator settings are stored
  • Loading branch information
FWDekker authored Jan 12, 2025
2 parents ada3a6b + 942a0d5 commit ce4e8c4
Show file tree
Hide file tree
Showing 25 changed files with 224 additions and 25 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
# Changelog
### 9.9.9-unreleased
### Changed
* Refreshed (encrypted) bug reporter token.
* Refreshed (encrypted) bug reporter token. ([#548](https://github.com/FWDekker/intellij-randomness/issues/548))

### Fixed
* Fixed specific settings resetting after IDE restart. Specifically, for any scheme, "Array", "Fixed Length", and "Surround With" would reset. ([#549](https://github.com/FWDekker/intellij-randomness/issues/549))


## 3.3.3 -- 2024-10-16
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ In chronological order of contribution:
* Thanks to [ForNeVeR](https://github.com/ForNeVeR) for [reporting a compatibility issue with the IntelliJ EAP](https://github.com/FWDekker/intellij-randomness/issues/459)!
* Thanks to [Vitaly Provodin](https://github.com/vprovodin) for [also reporting that compatibility issue](https://github.com/FWDekker/intellij-randomness/issues/460)!
* Thanks to [Juraj Jurčo](https://github.com/JiangHongTiao) for [suggesting adding support for newer UUID versions](https://github.com/FWDekker/intellij-randomness/issues/513)!
* Thanks to [iKa1ns](https://github.com/iKa1ns) for [reporting a bug with resetting settings](https://github.com/FWDekker/intellij-randomness/issues/549)!
* Thanks to [everyone who clicked "see details and submit report" and sent an anonymous bug report](https://github.com/FWDekkerBot/intellij-randomness-issues/issues)!

If I should add, remove, or change anything here, just open an issue or email me!
10 changes: 5 additions & 5 deletions src/main/kotlin/com/fwdekker/randomness/Scheme.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package com.fwdekker.randomness

import com.fwdekker.randomness.affix.AffixDecorator
import com.fwdekker.randomness.array.ArrayDecorator
import com.fwdekker.randomness.fixedlength.FixedLengthDecorator
import com.intellij.util.xmlb.annotations.Transient
import com.intellij.util.xmlb.annotations.XCollection
import kotlin.random.Random


Expand Down Expand Up @@ -39,9 +35,13 @@ abstract class Scheme : State() {
* decorators, use [generateUndecoratedStrings]. Decorators are applied in ascending order. That is, the output of
* the scheme is fed into the decorator at index `0`, and that output is fed into the decorator at index `1`, and so
* on.
*
* Implementations of [Scheme] must implement the [decorators] field as a getter function, which returns a list of
* references to decorators. Each decorator must be stored in its own field, annotated with
* [com.intellij.util.xmlb.annotations.OptionTag]. This way, the deserializer knows that the field is not transient
* despite not being a mutable field.
*/
@get:Transient
@get:XCollection(elementTypes = [AffixDecorator::class, ArrayDecorator::class, FixedLengthDecorator::class])
abstract val decorators: List<DecoratorScheme>

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ data class AffixDecorator(
const val DEFAULT_ENABLED = false

/**
* The minimum valid value of the [descriptor] field.
* The default [descriptor] of the affix.
*/
const val DEFAULT_DESCRIPTOR = ""
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.fwdekker.randomness.DecoratorScheme
import com.fwdekker.randomness.OverlayIcon
import com.fwdekker.randomness.OverlayedIcon
import com.fwdekker.randomness.affix.AffixDecorator
import com.intellij.util.xmlb.annotations.OptionTag


/**
Expand All @@ -23,7 +24,7 @@ data class ArrayDecorator(
var maxCount: Int = DEFAULT_MAX_COUNT,
var separatorEnabled: Boolean = DEFAULT_SEPARATOR_ENABLED,
var separator: String = DEFAULT_SEPARATOR,
val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
@OptionTag val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
) : DecoratorScheme() {
override val name = Bundle("array.title")
override val icon get() = if (enabled) OverlayedIcon(OverlayIcon.ARRAY) else null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.fwdekker.randomness.TypeIcon
import com.fwdekker.randomness.array.ArrayDecorator
import com.fwdekker.randomness.ui.toLocalDateTime
import com.intellij.ui.JBColor
import com.intellij.util.xmlb.annotations.OptionTag
import java.awt.Color
import java.time.Instant
import java.time.format.DateTimeFormatter
Expand All @@ -24,7 +25,7 @@ data class DateTimeScheme(
var minDateTime: Long = DEFAULT_MIN_DATE_TIME,
var maxDateTime: Long = DEFAULT_MAX_DATE_TIME,
var pattern: String = DEFAULT_PATTERN,
val arrayDecorator: ArrayDecorator = ArrayDecorator(),
@OptionTag val arrayDecorator: ArrayDecorator = ArrayDecorator(),
) : Scheme() {
override val name = Bundle("datetime.title")
override val typeIcon get() = BASE_ICON
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.fwdekker.randomness.TypeIcon
import com.fwdekker.randomness.affix.AffixDecorator
import com.fwdekker.randomness.array.ArrayDecorator
import com.intellij.ui.JBColor
import com.intellij.util.xmlb.annotations.OptionTag
import java.awt.Color
import java.text.DecimalFormat
import kotlin.math.nextUp
Expand All @@ -33,8 +34,8 @@ data class DecimalScheme(
var decimalSeparator: String = DEFAULT_DECIMAL_SEPARATOR,
var groupingSeparatorEnabled: Boolean = DEFAULT_GROUPING_SEPARATOR_ENABLED,
var groupingSeparator: String = DEFAULT_GROUPING_SEPARATOR,
val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
@OptionTag val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
@OptionTag val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
) : Scheme() {
override val name = Bundle("decimal.title")
override val typeIcon get() = BASE_ICON
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.fwdekker.randomness.affix.AffixDecorator
import com.fwdekker.randomness.array.ArrayDecorator
import com.fwdekker.randomness.fixedlength.FixedLengthDecorator
import com.intellij.ui.JBColor
import com.intellij.util.xmlb.annotations.OptionTag
import com.intellij.util.xmlb.annotations.Transient
import java.awt.Color
import java.text.DecimalFormat
Expand All @@ -34,9 +35,9 @@ data class IntegerScheme(
var isUppercase: Boolean = DEFAULT_IS_UPPERCASE,
var groupingSeparatorEnabled: Boolean = DEFAULT_GROUPING_SEPARATOR_ENABLED,
var groupingSeparator: String = DEFAULT_GROUPING_SEPARATOR,
val fixedLengthDecorator: FixedLengthDecorator = DEFAULT_FIXED_LENGTH_DECORATOR,
val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
@OptionTag val fixedLengthDecorator: FixedLengthDecorator = DEFAULT_FIXED_LENGTH_DECORATOR,
@OptionTag val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
@OptionTag val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
) : Scheme() {
@get:Transient
override val name = Bundle("integer.title")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.fwdekker.randomness.string.StringScheme.Companion.LOOK_ALIKE_CHARACTE
import com.github.curiousoddman.rgxgen.RgxGen
import com.github.curiousoddman.rgxgen.parsing.dflt.RgxGenParseException
import com.intellij.ui.JBColor
import com.intellij.util.xmlb.annotations.OptionTag
import java.awt.Color
import kotlin.random.asJavaRandom

Expand All @@ -30,7 +31,7 @@ data class StringScheme(
var isNonMatching: Boolean = DEFAULT_IS_NON_MATCHING,
var capitalization: CapitalizationMode = DEFAULT_CAPITALIZATION,
var removeLookAlikeSymbols: Boolean = DEFAULT_REMOVE_LOOK_ALIKE_SYMBOLS,
val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
@OptionTag val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
) : Scheme() {
override val name = Bundle("string.title")
override val typeIcon get() = BASE_ICON
Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/com/fwdekker/randomness/template/Template.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.fwdekker.randomness.string.StringScheme
import com.fwdekker.randomness.uuid.UuidScheme
import com.fwdekker.randomness.word.WordScheme
import com.intellij.ui.Gray
import com.intellij.util.xmlb.annotations.OptionTag
import com.intellij.util.xmlb.annotations.XCollection
import kotlin.random.Random

Expand All @@ -39,7 +40,7 @@ data class Template(
]
)
val schemes: MutableList<Scheme> = DEFAULT_SCHEMES,
val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
@OptionTag val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
) : Scheme() {
override val typeIcon get() = TypeIcon.combine(schemes.mapNotNull { it.typeIcon }) ?: DEFAULT_ICON
override val decorators get() = listOf(arrayDecorator)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.fwdekker.randomness.TypeIcon
import com.fwdekker.randomness.affix.AffixDecorator
import com.fwdekker.randomness.array.ArrayDecorator
import com.intellij.ui.Gray
import com.intellij.util.xmlb.annotations.OptionTag
import com.intellij.util.xmlb.annotations.Transient


Expand All @@ -25,8 +26,8 @@ import com.intellij.util.xmlb.annotations.Transient
data class TemplateReference(
var templateUuid: String? = null,
var capitalization: CapitalizationMode = DEFAULT_CAPITALIZATION,
val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
@OptionTag val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
@OptionTag val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
) : Scheme() {
override val name get() = template?.name?.let { "[$it]" } ?: Bundle("reference.title")
override val typeIcon get() = template?.typeIcon ?: DEFAULT_ICON
Expand Down
5 changes: 3 additions & 2 deletions src/main/kotlin/com/fwdekker/randomness/uuid/UuidScheme.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import com.fwdekker.randomness.TypeIcon
import com.fwdekker.randomness.affix.AffixDecorator
import com.fwdekker.randomness.array.ArrayDecorator
import com.intellij.ui.JBColor
import com.intellij.util.xmlb.annotations.OptionTag
import java.awt.Color
import java.util.UUID
import kotlin.random.Random
Expand All @@ -34,8 +35,8 @@ data class UuidScheme(
var version: Int = DEFAULT_VERSION,
var isUppercase: Boolean = DEFAULT_IS_UPPERCASE,
var addDashes: Boolean = DEFAULT_ADD_DASHES,
val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
@OptionTag val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
@OptionTag val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
) : Scheme() {
override val name = Bundle("uuid.title")
override val typeIcon get() = BASE_ICON
Expand Down
5 changes: 3 additions & 2 deletions src/main/kotlin/com/fwdekker/randomness/word/WordScheme.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.fwdekker.randomness.TypeIcon
import com.fwdekker.randomness.affix.AffixDecorator
import com.fwdekker.randomness.array.ArrayDecorator
import com.intellij.ui.JBColor
import com.intellij.util.xmlb.annotations.OptionTag
import java.awt.Color


Expand All @@ -22,8 +23,8 @@ import java.awt.Color
data class WordScheme(
var words: List<String> = DEFAULT_WORDS,
var capitalization: CapitalizationMode = DEFAULT_CAPITALIZATION,
val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
@OptionTag val affixDecorator: AffixDecorator = DEFAULT_AFFIX_DECORATOR,
@OptionTag val arrayDecorator: ArrayDecorator = DEFAULT_ARRAY_DECORATOR,
) : Scheme() {
override val name = Bundle("word.title")
override val typeIcon get() = BASE_ICON
Expand Down
Loading

0 comments on commit ce4e8c4

Please sign in to comment.