[project model] mark FacetUtil.saveFacetConfiguration and FacetState.getConfiguration as @Nullable

...and add necessary checks. This fixes NullPointerException, which may happen if there is an InvalidFacetConfiguration without a configuration tag (reproduced in IntelliJConfigurationFilesFormatTest).

GitOrigin-RevId: 804d3271e97c8415a22e130ffd4ddddf93e944df
This commit is contained in:
Nikolay Chashnikov
2023-03-17 10:59:21 +01:00
committed by intellij-monorepo-bot
parent 1dc2ba82dc
commit 496511375f
5 changed files with 7 additions and 7 deletions

View File

@@ -28,7 +28,7 @@ class FacetTypeUnloadingTest : HeavyPlatformTestCase() {
assertTrue(addedFacet.isDisposed)
val invalidFacet = InvalidFacetManager.getInstance(myProject).invalidFacets.single()
assertEquals("mock", invalidFacet.name)
assertEquals("<configuration data=\"my data\" />", JDOMUtil.write(invalidFacet.configuration.facetState.configuration))
assertEquals("<configuration data=\"my data\" />", JDOMUtil.write(invalidFacet.configuration.facetState.configuration!!))
registerFacetType(MockFacetType(), testRootDisposable)
assertTrue(InvalidFacetManager.getInstance(myProject).invalidFacets.isEmpty())

View File

@@ -30,9 +30,9 @@ interface ConfigFileItemSerializer {
}
}
fun deserializeConfigFiles(rootElement: Element): MutableList<ConfigFileItem> {
fun deserializeConfigFiles(rootElement: Element?): MutableList<ConfigFileItem> {
val configFiles = mutableListOf<ConfigFileItem>()
val descriptorsElement = rootElement.getChild(DESCRIPTORS_ELEMENT)
val descriptorsElement = rootElement?.getChild(DESCRIPTORS_ELEMENT)
if (descriptorsElement != null) {
val children: List<Element> = descriptorsElement.getChildren(ELEMENT_NAME)
for (child in children) {

View File

@@ -8,6 +8,7 @@ import com.intellij.util.xmlb.annotations.Property;
import com.intellij.util.xmlb.annotations.Tag;
import com.intellij.util.xmlb.annotations.XCollection;
import org.jdom.Element;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.serialization.SerializationConstants;
import java.util.ArrayList;
@@ -37,7 +38,7 @@ public final class FacetState {
}
@Tag(JpsFacetSerializer.CONFIGURATION_TAG)
public Element getConfiguration() {
public @Nullable Element getConfiguration() {
return myConfiguration;
}

View File

@@ -71,8 +71,7 @@ public class FacetUtil {
}
}
@NotNull
public static Element saveFacetConfiguration(@NotNull FacetConfiguration configuration) {
public static @Nullable Element saveFacetConfiguration(@NotNull FacetConfiguration configuration) {
if (configuration instanceof PersistentStateComponent) {
Object state = ((PersistentStateComponent<?>)configuration).getState();
if (state instanceof Element) {

View File

@@ -87,7 +87,7 @@ class FacetManagerBridge(module: Module) : FacetManagerBase() {
FacetUtil.loadFacetConfiguration(configuration, config)
val name = state.name
val facet: F = createFacet(module, type, name, configuration, underlyingFacet)
if (facet is JDOMExternalizable) {
if (facet is JDOMExternalizable && config != null) {
//todo[nik] remove
facet.readExternal(config)
}