Skip to content

Commit 03c4860

Browse files
authored
Merge pull request #748 from approvals/JayBazuzi/static-PackageSettings
- B PackageSettings only needs to support private ctor if the members are all static
2 parents 33c1643 + be93c73 commit 03c4860

5 files changed

Lines changed: 36 additions & 4 deletions

File tree

approvaltests-tests/src/test/java/org/packagesettings/subpackage/PackageSettings.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,4 @@ public class PackageSettings
55
public String name = "Test Name";
66
private boolean rating = true;
77
public String ratingScale = "logarithmic";
8-
private PackageSettings()
9-
{
10-
}
118
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.packagesettings.subpackage_static;
2+
3+
final class PackageSettings
4+
{
5+
static String name = "Test Name";
6+
static boolean rating = true;
7+
static String ratingScale = "logarithmic";
8+
private PackageSettings()
9+
{
10+
}
11+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.packagesettings.subpackage_static;
2+
3+
import org.approvaltests.Approvals;
4+
import org.junit.jupiter.api.Test;
5+
import org.packagesettings.PackageLevelSettings;
6+
7+
public class PackageSettingsTest
8+
{
9+
// https://docs.openrewrite.org/recipes/staticanalysis/hideutilityclassconstructor says:
10+
// Ensures utility classes (classes containing only static methods or fields in their API) do not have a public constructor.
11+
@Test
12+
public void testRetrieveValueWithPrivateConstructor()
13+
{
14+
Approvals.verify(PackageLevelSettings.get());
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lastName : Falco [from org.packagesettings.PackageSettings]
2+
name : Test Name [from org.packagesettings.subpackage_static.PackageSettings]
3+
rating : true [from org.packagesettings.subpackage_static.PackageSettings]
4+
ratingScale : logarithmic [from org.packagesettings.subpackage_static.PackageSettings]

approvaltests-util/src/main/java/org/packagesettings/PackageLevelSettings.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ private static Map<String, Settings> getSettingsFor(String packageName, HashSet<
5050
{
5151
Class<?> clazz = loadClass(packageName + "." + PACKAGE_SETTINGS);
5252
Field[] declaredFields = clazz.getDeclaredFields();
53-
Object o = createInstance(clazz);
53+
Object o = null;
5454
for (Field field : declaredFields)
5555
{
5656
if (Modifier.isStatic(field.getModifiers()))
@@ -59,6 +59,10 @@ private static Map<String, Settings> getSettingsFor(String packageName, HashSet<
5959
}
6060
else
6161
{
62+
if (o == null)
63+
{
64+
o = createInstance(clazz);
65+
}
6266
settings.put(field.getName(), getFieldValue(field, o));
6367
}
6468
}

0 commit comments

Comments
 (0)