Skip to content

Commit 002578a

Browse files
committed
refactor: address all error-prone warnings and modernize codebase
- Upgrade error-prone to latest version - Reconfigure compiler plugin with improved error-prone flags - Add optional profile to fail build on error-prone findings - Replace locale-sensitive string operations with Locale.ROOT - Remove unused parameters and simplify method signatures - Improve null-safety and validation (e.g. Character.digit) - Modernize time handling with ZoneId - Inline trivial variables and simplify logic - Add missing @OverRide annotations - Enhance Javadoc for public APIs - Clean up formatting and minor inconsistencies
1 parent 57aa01e commit 002578a

51 files changed

Lines changed: 659 additions & 331 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pom.xml

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<name>jFairy</name>
1010
<description>Java fake data generator</description>
1111
<url>https://github.com/Devskiller/jfairy</url>
12-
<inceptionYear>2013</inceptionYear>
12+
<inceptionYear>2013</inceptionYear>
1313

1414
<licenses>
1515
<license>
@@ -77,8 +77,6 @@
7777
<revision>0.8.3-SNAPSHOT</revision>
7878

7979
<javaVersion>17</javaVersion>
80-
<maven.compiler.source>${javaVersion}</maven.compiler.source>
81-
<maven.compiler.target>${javaVersion}</maven.compiler.target>
8280

8381
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
8482
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -105,7 +103,7 @@
105103
<dep.plugin.coveralls.version>4.3.0</dep.plugin.coveralls.version>
106104
<dep.plugin.deploy.version>3.1.4</dep.plugin.deploy.version>
107105
<dep.plugin.enforcer.version>3.6.2</dep.plugin.enforcer.version>
108-
<dep.plugin.error-prone.version>2.39.0</dep.plugin.error-prone.version>
106+
<dep.plugin.error-prone.version>2.48.0</dep.plugin.error-prone.version>
109107
<dep.plugin.flatten.version>1.7.3</dep.plugin.flatten.version>
110108
<dep.plugin.gmavenplus.version>4.3.1</dep.plugin.gmavenplus.version>
111109
<dep.plugin.gpg.version>3.2.8</dep.plugin.gpg.version>
@@ -152,12 +150,12 @@
152150
</exclusion>
153151
</exclusions>
154152
</dependency>
155-
<dependency>
156-
<groupId>org.slf4j</groupId>
157-
<artifactId>slf4j-simple</artifactId>
158-
<version>${dep.slf4j.version}</version>
159-
<scope>test</scope>
160-
</dependency>
153+
<dependency>
154+
<groupId>org.slf4j</groupId>
155+
<artifactId>slf4j-simple</artifactId>
156+
<version>${dep.slf4j.version}</version>
157+
<scope>test</scope>
158+
</dependency>
161159
<dependency>
162160
<groupId>org.spockframework</groupId>
163161
<artifactId>spock-core</artifactId>
@@ -224,12 +222,17 @@
224222
<artifactId>maven-compiler-plugin</artifactId>
225223
<version>${dep.plugin.compiler.version}</version>
226224
<configuration>
225+
<release>${javaVersion}</release>
227226
<fork>true</fork>
227+
<showWarnings>true</showWarnings>
228228
<compilerArgs>
229229
<arg>-XDcompilePolicy=simple</arg>
230-
<arg>-XDdev</arg>
231-
<arg>-XDshould-stop.ifError=FLOW</arg>
232-
<arg>-Xplugin:ErrorProne</arg>
230+
<arg>-XDaddTypeAnnotationsToSymbol=true</arg>
231+
232+
<arg>--should-stop=ifError=FLOW</arg>
233+
234+
<arg>-Xplugin:ErrorProne -Xep:MissingSummary:WARN -Xep:InvalidBlockTag:WARN</arg>
235+
233236
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
234237
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
235238
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
@@ -295,7 +298,7 @@
295298
org.apache.maven.plugins:maven-clean-plugin,
296299
org.apache.maven.plugins:maven-dependency-plugin,
297300
org.apache.maven.plugins:maven-install-plugin,
298-
org.apache.maven.plugins:maven-site-plugin
301+
org.apache.maven.plugins:maven-site-plugin
299302
</unCheckedPluginList>
300303
</requirePluginVersions>
301304
</rules>
@@ -463,6 +466,32 @@
463466
</properties>
464467
</profile>
465468

469+
<!-- profile to fail the build on Error Prone findings
470+
mvn clean compile -D check.fail-errorprone=true
471+
https://errorprone.info/bugpattern/IncompatibleModifiers -->
472+
<profile>
473+
<id>errorprone-fatal</id>
474+
<activation>
475+
<property>
476+
<name>check.fail-errorprone</name>
477+
<value>true</value>
478+
</property>
479+
</activation>
480+
<build>
481+
<plugins>
482+
<plugin>
483+
<groupId>org.apache.maven.plugins</groupId>
484+
<artifactId>maven-compiler-plugin</artifactId>
485+
<configuration>
486+
<compilerArgs combine.children="append">
487+
<arg>-Werror</arg>
488+
</compilerArgs>
489+
</configuration>
490+
</plugin>
491+
</plugins>
492+
</build>
493+
</profile>
494+
466495
<profile>
467496
<id>release</id>
468497
<build>

src/main/java/com/devskiller/jfairy/LocaleSpecificProvidersFactory.java

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,24 @@ static LocaleSpecificProviders createProvidersForLocale(Locale locale,
7171
DateProducer dateProducer) {
7272
LanguageCode code;
7373
try {
74-
code = LanguageCode.valueOf(locale.getLanguage().toUpperCase());
74+
code = LanguageCode.valueOf(locale.getLanguage().toUpperCase(Locale.ROOT));
7575
} catch (IllegalArgumentException ex) {
7676
LOG.warn("Unknown locale {}", locale);
7777
code = LanguageCode.EN;
7878
}
7979

8080
return switch (code) {
8181
case PL -> createPlProviders(dataMaster, baseProducer, dateProducer);
82-
case EN -> createEnProviders(dataMaster, baseProducer, dateProducer);
83-
case ES -> createEsProviders(dataMaster, baseProducer, dateProducer);
84-
case FR -> createFrProviders(dataMaster, baseProducer, dateProducer);
85-
case IT -> createItProviders(dataMaster, baseProducer, dateProducer);
82+
case EN -> createEnProviders(dataMaster, baseProducer);
83+
case ES -> createEsProviders(dataMaster, baseProducer);
84+
case FR -> createFrProviders(dataMaster, baseProducer);
85+
case IT -> createItProviders(dataMaster, baseProducer);
8686
case SK -> createSkProviders(dataMaster, baseProducer, dateProducer);
8787
case SV -> createSvProviders(dataMaster, baseProducer, dateProducer);
88-
case ZH -> createZhProviders(dataMaster, baseProducer, dateProducer);
89-
case DE -> createDeProviders(dataMaster, baseProducer, dateProducer);
90-
case KA -> createKaProviders(dataMaster, baseProducer, dateProducer);
91-
case BR -> createBrProviders(dataMaster, baseProducer, dateProducer);
88+
case ZH -> createZhProviders(dataMaster, baseProducer);
89+
case DE -> createDeProviders(dataMaster, baseProducer);
90+
case KA -> createKaProviders(dataMaster, baseProducer);
91+
case BR -> createBrProviders(dataMaster, baseProducer);
9292
};
9393
}
9494

@@ -107,9 +107,8 @@ private static LocaleSpecificProviders createPlProviders(DataMaster dataMaster,
107107
private static LocaleSpecificProviders createSkProviders(DataMaster dataMaster,
108108
BaseProducer baseProducer,
109109
DateProducer dateProducer) {
110-
NationalIdentificationNumberFactory nationalIdFactory = new SkNationalIdentificationNumberFactory(baseProducer, dateProducer);
111110
return new LocaleSpecificProviders(
112-
nationalIdFactory,
111+
new SkNationalIdentificationNumberFactory(baseProducer, dateProducer),
113112
new SkNationalIdentityCardNumberProvider(dateProducer, baseProducer),
114113
new SkVATIdentificationNumberProvider(baseProducer),
115114
new SkAddressProvider(dataMaster, baseProducer),
@@ -118,8 +117,7 @@ private static LocaleSpecificProviders createSkProviders(DataMaster dataMaster,
118117
}
119118

120119
private static LocaleSpecificProviders createEnProviders(DataMaster dataMaster,
121-
BaseProducer baseProducer,
122-
DateProducer dateProducer) {
120+
BaseProducer baseProducer) {
123121
return new LocaleSpecificProviders(
124122
new NoNationalIdentificationNumberFactory(),
125123
new EnNationalIdentityCardNumberProvider(baseProducer),
@@ -134,12 +132,10 @@ private static LocaleSpecificProviders createEnProviders(DataMaster dataMaster,
134132
*
135133
* @param dataMaster data source
136134
* @param baseProducer base producer
137-
* @param dateProducer date producer
138135
* @return French specific providers
139136
*/
140137
private static LocaleSpecificProviders createFrProviders(DataMaster dataMaster,
141-
BaseProducer baseProducer,
142-
DateProducer dateProducer) {
138+
BaseProducer baseProducer) {
143139
return new LocaleSpecificProviders(
144140
new NoNationalIdentificationNumberFactory(),
145141
new FrNationalIdentityCardNumberProvider(baseProducer),
@@ -156,12 +152,10 @@ private static LocaleSpecificProviders createFrProviders(DataMaster dataMaster,
156152
*
157153
* @param dataMaster data source
158154
* @param baseProducer base producer
159-
* @param dateProducer date producer
160155
* @return Italian specific providers
161156
*/
162157
private static LocaleSpecificProviders createItProviders(DataMaster dataMaster,
163-
BaseProducer baseProducer,
164-
DateProducer dateProducer) {
158+
BaseProducer baseProducer) {
165159
return new LocaleSpecificProviders(
166160
new NoNationalIdentificationNumberFactory(),
167161
new EnNationalIdentityCardNumberProvider(baseProducer),
@@ -172,8 +166,7 @@ private static LocaleSpecificProviders createItProviders(DataMaster dataMaster,
172166
}
173167

174168
private static LocaleSpecificProviders createEsProviders(DataMaster dataMaster,
175-
BaseProducer baseProducer,
176-
DateProducer dateProducer) {
169+
BaseProducer baseProducer) {
177170
return new LocaleSpecificProviders(
178171
new NoNationalIdentificationNumberFactory(),
179172
new EsNationalIdentityCardNumberProvider(baseProducer),
@@ -197,8 +190,7 @@ private static LocaleSpecificProviders createSvProviders(DataMaster dataMaster,
197190
}
198191

199192
private static LocaleSpecificProviders createZhProviders(DataMaster dataMaster,
200-
BaseProducer baseProducer,
201-
DateProducer dateProducer) {
193+
BaseProducer baseProducer) {
202194
return new LocaleSpecificProviders(
203195
new NoNationalIdentificationNumberFactory(),
204196
new ZhNationalIdentityCardNumberProvider(baseProducer),
@@ -209,8 +201,7 @@ private static LocaleSpecificProviders createZhProviders(DataMaster dataMaster,
209201
}
210202

211203
private static LocaleSpecificProviders createDeProviders(DataMaster dataMaster,
212-
BaseProducer baseProducer,
213-
DateProducer dateProducer) {
204+
BaseProducer baseProducer) {
214205
return new LocaleSpecificProviders(
215206
new NoNationalIdentificationNumberFactory(),
216207
new DeNationalIdentityCardNumberProvider(baseProducer),
@@ -221,8 +212,7 @@ private static LocaleSpecificProviders createDeProviders(DataMaster dataMaster,
221212
}
222213

223214
private static LocaleSpecificProviders createKaProviders(DataMaster dataMaster,
224-
BaseProducer baseProducer,
225-
DateProducer dateProducer) {
215+
BaseProducer baseProducer) {
226216
return new LocaleSpecificProviders(
227217
new NoNationalIdentificationNumberFactory(),
228218
new KaNationalIdentityCardNumberProvider(baseProducer),
@@ -233,8 +223,7 @@ private static LocaleSpecificProviders createKaProviders(DataMaster dataMaster,
233223
}
234224

235225
private static LocaleSpecificProviders createBrProviders(DataMaster dataMaster,
236-
BaseProducer baseProducer,
237-
DateProducer dateProducer) {
226+
BaseProducer baseProducer) {
238227
return new LocaleSpecificProviders(
239228
new NoNationalIdentificationNumberFactory(),
240229
new BrNationalIdentityCardNumberProvider(baseProducer),

src/main/java/com/devskiller/jfairy/data/DataMaster.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,56 @@
55
import com.devskiller.jfairy.producer.util.LanguageCode;
66

77
/**
8+
* Providing access to localized data used by producers.
9+
* <p>
10+
* This master component acts as the central registry for retrieving
11+
* strings and structured data based on specific keys and language codes.
12+
*
813
* @author Olga Maciaszek-Sharma
914
* @since 23.04.15
1015
*/
1116
public interface DataMaster {
1217

18+
/**
19+
* Returns a single string value associated with the given key.
20+
*
21+
* @param key the unique identifier for the data entry
22+
* @return the string value found for the key
23+
*/
1324
String getString(String key);
1425

26+
/**
27+
* Returns a list of strings associated with the given key.
28+
*
29+
* @param key the unique identifier for the data entries
30+
* @return a list of string values found for the key
31+
*/
1532
List<String> getStringList(String key);
1633

34+
/**
35+
* Retrieves structured data of a specific type and converts it to the requested class.
36+
*
37+
* @param dataKey the root key for the data search
38+
* @param type the specific sub-type or category
39+
* @param resultClass the class type to which the result should be cast
40+
* @param <T> the type of the result object
41+
* @return an instance of the requested type containing the values
42+
*/
1743
<T> T getValuesOfType(String dataKey, String type, Class<T> resultClass);
1844

45+
/**
46+
* Selects a random string value from the entries associated with the given key.
47+
*
48+
* @param key the unique identifier for the data list
49+
* @return a randomly selected string value
50+
*/
1951
String getRandomValue(String key);
2052

53+
/**
54+
* Returns the language code currently used by this data master.
55+
*
56+
* @return the active LanguageCode
57+
*/
2158
LanguageCode getLanguage();
2259

2360
}

src/main/java/com/devskiller/jfairy/data/MapBasedDataMaster.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.Enumeration;
1111
import java.util.HashMap;
1212
import java.util.List;
13+
import java.util.Locale;
1314
import java.util.Map;
1415

1516
import org.snakeyaml.engine.v2.api.Load;
@@ -42,6 +43,7 @@ public List<String> getStringList(String key) {
4243
return getData(key, List.class);
4344
}
4445

46+
@Override
4547
@SuppressWarnings("unchecked")
4648
public <T> T getValuesOfType(String dataKey, final String type, final Class<T> resultClass) {
4749
Map<String, List<T>> data = getData(dataKey, Map.class);
@@ -70,7 +72,7 @@ public String getRandomValue(String key) {
7072

7173
@Override
7274
public LanguageCode getLanguage() {
73-
String tag = getString(LANGUAGE_TAG).toUpperCase();
75+
String tag = getString(LANGUAGE_TAG).toUpperCase(Locale.ROOT);
7476
try {
7577
return LanguageCode.valueOf(tag);
7678
} catch (IllegalArgumentException ex) {
@@ -124,7 +126,7 @@ private static final class CaseInsensitiveMap extends HashMap<String, Object> {
124126
@Override
125127
@SuppressWarnings("unchecked")
126128
public Object put(String key, Object value) {
127-
String loweredKey = key.toLowerCase();
129+
String loweredKey = key.toLowerCase(Locale.ROOT);
128130
Object valueToInsert = value;
129131

130132
if (value instanceof Map) {
@@ -144,7 +146,7 @@ public void putAll(Map<? extends String, ?> map) {
144146

145147
@Override
146148
public Object get(Object key) {
147-
return super.get(((String) key).toLowerCase());
149+
return super.get(((String) key).toLowerCase(Locale.ROOT));
148150
}
149151
}
150152
}

src/main/java/com/devskiller/jfairy/producer/BaseProducer.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,23 @@ public String bothify(String string) {
192192
return letterify(numerify(string));
193193
}
194194

195+
/**
196+
* Replaces occurrence of a specific symbol with a random character within the given range.
197+
*
198+
* @param string the template string containing symbols to be replaced
199+
* @param symbol the character to look for in the template
200+
* @param from the lower bound (inclusive) of the random character range
201+
* @param to the upper bound (inclusive) of the random character range
202+
* @return a new string with all symbols replaced by random characters
203+
*/
195204
private String replaceSymbolWithCharsFromTo(String string, char symbol, char from, char to) {
196205
StringBuilder result = new StringBuilder();
197-
for (char aChar : string.toCharArray()) {
198-
if (aChar == symbol) {
206+
for (int i = 0; i < string.length(); i++) {
207+
char c = string.charAt(i);
208+
if (c == symbol) {
199209
result.append(randomBetween(from, to));
200210
} else {
201-
result.append(aChar);
211+
result.append(c);
202212
}
203213
}
204214
return result.toString();

src/main/java/com/devskiller/jfairy/producer/TimeProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.time.LocalDate;
88
import java.time.LocalDateTime;
9+
import java.time.ZoneId;
910

1011
public class TimeProvider {
1112

@@ -14,10 +15,10 @@ public int getCurrentYear() {
1415
}
1516

1617
public LocalDateTime getCurrentTime() {
17-
return LocalDateTime.now();
18+
return LocalDateTime.now(ZoneId.systemDefault());
1819
}
1920

2021
public LocalDate getCurrentDate() {
21-
return LocalDate.now();
22+
return LocalDate.now(ZoneId.systemDefault());
2223
}
2324
}

src/main/java/com/devskiller/jfairy/producer/VATIdentificationNumberProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@
1313
*/
1414
public interface VATIdentificationNumberProvider extends Supplier<String> {
1515

16+
@Override
1617
String get();
1718
}

0 commit comments

Comments
 (0)