Skip to content

Commit 068313a

Browse files
committed
Correctly handle when built-in configuration is missing / was removed
Fixes #66
1 parent 4d5444a commit 068313a

4 files changed

Lines changed: 55 additions & 15 deletions

File tree

src/main/java/software/xdev/pmd/model/config/ConfigurationLocationFactory.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Collections;
44
import java.util.Map;
5+
import java.util.Optional;
56
import java.util.WeakHashMap;
67

78
import org.jetbrains.annotations.NotNull;
@@ -11,6 +12,7 @@
1112
import software.xdev.pmd.external.org.apache.shiro.lang.util.SoftHashMap;
1213
import software.xdev.pmd.model.config.bundled.BundledConfig;
1314
import software.xdev.pmd.model.config.bundled.BundledConfigurationLocation;
15+
import software.xdev.pmd.model.config.bundled.UnknownBundledConfigurationLocation;
1416
import software.xdev.pmd.model.config.file.FileConfigurationLocation;
1517
import software.xdev.pmd.model.config.file.RelativeFileConfigurationLocation;
1618

@@ -65,7 +67,9 @@ record CreateCacheKey(
6567
{
6668
case LOCAL_FILE -> new FileConfigurationLocation(project, id);
6769
case PROJECT_RELATIVE -> new RelativeFileConfigurationLocation(project, id);
68-
case BUNDLED -> new BundledConfigurationLocation(BundledConfig.fromId(id), project);
70+
case BUNDLED -> Optional.ofNullable(BundledConfig.fromId(id))
71+
.map(c -> new BundledConfigurationLocation(c, project))
72+
.orElseGet(() -> new UnknownBundledConfigurationLocation(id, project));
6973
};
7074

7175
configurationLocation.setLocation(location);

src/main/java/software/xdev/pmd/model/config/bundled/BundledConfig.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.stream.Collectors;
1111

1212
import org.jetbrains.annotations.NotNull;
13+
import org.jetbrains.annotations.Nullable;
1314

1415
import com.intellij.openapi.application.ApplicationManager;
1516

@@ -29,19 +30,15 @@ public final class BundledConfig
2930

3031
private final String description;
3132

32-
private final String path;
33-
3433
private BundledConfig(
3534
final int sortOrder,
3635
@NotNull final String id,
37-
@NotNull final String description,
38-
@NotNull final String path)
36+
@NotNull final String description)
3937
{
4038
this.sortOrder = sortOrder;
4139
this.id = id;
4240
this.location = BUNDLED_LOCATION;
4341
this.description = description;
44-
this.path = path;
4542
}
4643

4744
public int getSortOrder()
@@ -66,24 +63,26 @@ public String getDescription()
6663
return this.description;
6764
}
6865

69-
@NotNull
70-
public String getPath()
71-
{
72-
return this.path;
73-
}
74-
7566
public boolean matches(@NotNull final ConfigurationLocation configurationLocation)
7667
{
7768
return configurationLocation.getType() == ConfigurationType.BUNDLED
7869
&& Objects.equals(configurationLocation.getLocation(), this.location)
7970
&& Objects.equals(configurationLocation.getDescription(), this.description);
8071
}
8172

73+
private static final AtomicInteger UNKNOWN_COUNTER = new AtomicInteger(1000);
74+
8275
@NotNull
76+
public static BundledConfig createUnknownDummy(@NotNull final String id)
77+
{
78+
return new BundledConfig(UNKNOWN_COUNTER.getAndIncrement(), id, "UNKNOWN: " + id);
79+
}
80+
81+
@Nullable
8382
public static BundledConfig fromId(@NotNull final String id)
8483
{
8584
initAllIfRequired();
86-
return Objects.requireNonNull(all.get(id), "Failed to find id " + id);
85+
return all.get(id);
8786
}
8887

8988
public static Collection<BundledConfig> getAllBundledConfigs()
@@ -114,8 +113,7 @@ private static void initAllIfRequired()
114113
e.getKey() + "-" + Arrays.stream(e.getValue().split("/"))
115114
.reduce((l, r) -> r)
116115
.flatMap(fileName -> Arrays.stream(fileName.split("\\.")).findFirst())
117-
.orElse(e.getValue()),
118-
e.getValue()
116+
.orElse(e.getValue())
119117
))
120118
.collect(Collectors.toMap(
121119
BundledConfig::getId,

src/main/java/software/xdev/pmd/model/config/bundled/BundledConfigurationLocation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public void validate()
5353
// always valid
5454
}
5555

56+
@Nullable
5657
@Override
5758
protected synchronized RuleSet loadRuleSet()
5859
{
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package software.xdev.pmd.model.config.bundled;
2+
3+
import org.jetbrains.annotations.NotNull;
4+
import org.jetbrains.annotations.Nullable;
5+
6+
import com.intellij.openapi.project.Project;
7+
8+
import net.sourceforge.pmd.lang.rule.RuleSet;
9+
10+
11+
public class UnknownBundledConfigurationLocation extends BundledConfigurationLocation
12+
{
13+
public UnknownBundledConfigurationLocation(
14+
final @NotNull String id,
15+
final @NotNull Project project)
16+
{
17+
super(BundledConfig.createUnknownDummy(id), project);
18+
}
19+
20+
@Override
21+
public boolean isRemovable()
22+
{
23+
return true;
24+
}
25+
26+
@Override
27+
protected synchronized RuleSet loadRuleSet()
28+
{
29+
return null;
30+
}
31+
32+
@Override
33+
public @Nullable RuleSet getOrRefreshCachedRuleSet()
34+
{
35+
return null;
36+
}
37+
}

0 commit comments

Comments
 (0)