diff --git a/java/compiler/impl/src/com/intellij/compiler/options/ValidationConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/options/ValidationConfigurable.java index 21af5f7c0bad..0e790b649ca5 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/ValidationConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/ValidationConfigurable.java @@ -127,14 +127,14 @@ public class ValidationConfigurable implements SearchableConfigurable, Configura return o1.getDescription().equals(o2.getDescription()); } }); - return myConfiguration.VALIDATE_ON_BUILD != myValidateBox.isSelected() || + return myConfiguration.isValidateOnBuild() != myValidateBox.isSelected() || set.retainAll(markedValidators) || myExcludedConfigurable.isModified(); } @Override public void apply() throws ConfigurationException { - myConfiguration.VALIDATE_ON_BUILD = myValidateBox.isSelected(); + myConfiguration.setValidateOnBuild(myValidateBox.isSelected()); for (int i = 0; i < myValidators.getElementCount(); i++) { final Compiler validator = myValidators.getElementAt(i); myConfiguration.setSelected(validator, myValidators.isElementMarked(validator)); @@ -144,7 +144,7 @@ public class ValidationConfigurable implements SearchableConfigurable, Configura @Override public void reset() { - myValidateBox.setSelected(myConfiguration.VALIDATE_ON_BUILD); + myValidateBox.setSelected(myConfiguration.isValidateOnBuild()); final List validators = getValidators(); Collections.sort(validators, Comparator.comparing(Compiler::getDescription)); myValidators.setElements(validators, false); diff --git a/java/compiler/impl/src/com/intellij/compiler/options/ValidationConfiguration.java b/java/compiler/impl/src/com/intellij/compiler/options/ValidationConfiguration.java index eccef7ee45f5..83ec5547312a 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/ValidationConfiguration.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/ValidationConfiguration.java @@ -13,22 +13,18 @@ import com.intellij.openapi.project.Project; import com.intellij.util.xmlb.XmlSerializerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.model.serialization.java.compiler.JpsCompilerValidationExcludeSerializer; - -import java.util.HashMap; -import java.util.Map; +import org.jetbrains.jps.model.serialization.java.compiler.JpsValidationSerializer; /** * @author Dmitry Avdeev */ -@State(name = "ValidationConfiguration", storages = @Storage("validation.xml")) -public class ValidationConfiguration implements PersistentStateComponent { - - public boolean VALIDATE_ON_BUILD = false; - public Map VALIDATORS = new HashMap<>(); +@State(name = JpsValidationSerializer.COMPONENT_NAME, storages = @Storage(JpsValidationSerializer.CONFIG_FILE_NAME)) +public class ValidationConfiguration implements PersistentStateComponent { + private final JpsValidationSerializer.ValidationConfigurationState myState = new JpsValidationSerializer.ValidationConfigurationState(); public static boolean shouldValidate(Compiler validator, CompileContext context) { ValidationConfiguration configuration = getInstance(context.getProject()); - return (configuration.VALIDATE_ON_BUILD) && configuration.isSelected(validator); + return (configuration.myState.VALIDATE_ON_BUILD) && configuration.isSelected(validator); } public boolean isSelected(Compiler validator) { @@ -36,16 +32,24 @@ public class ValidationConfiguration implements PersistentStateComponent disabledValidators); + @NotNull ProcessorConfigProfile getDefaultAnnotationProcessingProfile(); ProcessorConfigProfile addAnnotationProcessingProfile(); diff --git a/jps/model-api/src/org/jetbrains/jps/model/java/compiler/JpsValidationConfiguration.java b/jps/model-api/src/org/jetbrains/jps/model/java/compiler/JpsValidationConfiguration.java new file mode 100644 index 000000000000..32d389bcd7e6 --- /dev/null +++ b/jps/model-api/src/org/jetbrains/jps/model/java/compiler/JpsValidationConfiguration.java @@ -0,0 +1,8 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.jps.model.java.compiler; + +public interface JpsValidationConfiguration { + boolean isValidateOnBuild(); + + boolean isValidatorEnabled(String validatorId); +} diff --git a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsJavaCompilerConfigurationImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsJavaCompilerConfigurationImpl.java index 1381cf0913b0..40dae8139813 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsJavaCompilerConfigurationImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsJavaCompilerConfigurationImpl.java @@ -20,10 +20,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.JpsElementChildRole; import org.jetbrains.jps.model.ex.JpsCompositeElementBase; import org.jetbrains.jps.model.ex.JpsElementChildRoleBase; -import org.jetbrains.jps.model.java.compiler.JpsCompilerExcludes; -import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerConfiguration; -import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions; -import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; +import org.jetbrains.jps.model.java.compiler.*; import org.jetbrains.jps.model.module.JpsModule; import java.io.File; @@ -49,6 +46,7 @@ public class JpsJavaCompilerConfigurationImpl extends JpsCompositeElementBase myAnnotationProcessingProfileMap; private ResourcePatterns myCompiledPatterns; + private JpsValidationConfiguration myValidationConfiguration = new JpsValidationConfigurationImpl(false, Collections.emptySet()); public JpsJavaCompilerConfigurationImpl() { } @@ -105,6 +103,17 @@ public class JpsJavaCompilerConfigurationImpl extends JpsCompositeElementBase disabledValidators) { + myValidationConfiguration = new JpsValidationConfigurationImpl(validateOnBuild, disabledValidators); + } + @NotNull @Override public ProcessorConfigProfile getDefaultAnnotationProcessingProfile() { diff --git a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsValidationConfigurationImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsValidationConfigurationImpl.java new file mode 100644 index 000000000000..309a6ade8359 --- /dev/null +++ b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsValidationConfigurationImpl.java @@ -0,0 +1,26 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.jps.model.java.impl.compiler; + +import org.jetbrains.jps.model.java.compiler.JpsValidationConfiguration; + +import java.util.Set; + +public class JpsValidationConfigurationImpl implements JpsValidationConfiguration { + private final boolean myValidateOnBuild; + private final Set myDisabledValidators; + + public JpsValidationConfigurationImpl(boolean validateOnBuild, Set disabledValidators) { + myValidateOnBuild = validateOnBuild; + myDisabledValidators = disabledValidators; + } + + @Override + public boolean isValidateOnBuild() { + return myValidateOnBuild; + } + + @Override + public boolean isValidatorEnabled(String validatorId) { + return !myDisabledValidators.contains(validatorId); + } +} diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java index d4d214ba4a8b..f320952f811f 100644 --- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java @@ -98,6 +98,7 @@ public class JpsJavaModelSerializerExtension extends JpsModelSerializerExtension public List getProjectExtensionSerializers() { return Arrays.asList(new JavaProjectExtensionSerializer(), new JpsJavaCompilerConfigurationSerializer(), + new JpsValidationSerializer(), new JpsJavaCompilerNotNullableSerializer(), new JpsCompilerValidationExcludeSerializer(), new JpsJavaCompilerWorkspaceConfigurationSerializer(), diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/JpsValidationSerializer.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/JpsValidationSerializer.java new file mode 100644 index 000000000000..34f6dc267adc --- /dev/null +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/JpsValidationSerializer.java @@ -0,0 +1,44 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.jps.model.serialization.java.compiler; + +import com.intellij.util.xmlb.XmlSerializer; +import org.jdom.Element; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jps.model.JpsProject; +import org.jetbrains.jps.model.java.JpsJavaExtensionService; +import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerConfiguration; +import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public class JpsValidationSerializer extends JpsProjectExtensionSerializer { + public static final String COMPONENT_NAME = "ValidationConfiguration"; + public static final String CONFIG_FILE_NAME = "validation.xml"; + + public JpsValidationSerializer() { + super(CONFIG_FILE_NAME, COMPONENT_NAME); + } + + @Override + public void loadExtension(@NotNull JpsProject project, @NotNull Element componentTag) { + JpsJavaCompilerConfiguration configuration = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(project); + ValidationConfigurationState state = XmlSerializer.deserialize(componentTag, ValidationConfigurationState.class); + Set disabledValidators = state.VALIDATORS.entrySet().stream() + .filter(e -> e.getValue() == Boolean.FALSE) + .map(e -> e.getKey()) + .collect(Collectors.toSet()); + configuration.setValidationConfiguration(state.VALIDATE_ON_BUILD, disabledValidators); + } + + @Override + public void saveExtension(@NotNull JpsProject project, @NotNull Element componentTag) { + } + + public static class ValidationConfigurationState { + public boolean VALIDATE_ON_BUILD = false; + public Map VALIDATORS = new HashMap<>(); + } +} diff --git a/jps/model-serialization/testData/compilerConfiguration/compilerConfiguration.ipr b/jps/model-serialization/testData/compilerConfiguration/compilerConfiguration.ipr index 620e8413a6a7..c5f06362dae5 100644 --- a/jps/model-serialization/testData/compilerConfiguration/compilerConfiguration.ipr +++ b/jps/model-serialization/testData/compilerConfiguration/compilerConfiguration.ipr @@ -55,5 +55,14 @@ + + + diff --git a/jps/model-serialization/testData/compilerConfigurationDir/.idea/validation.xml b/jps/model-serialization/testData/compilerConfigurationDir/.idea/validation.xml new file mode 100644 index 000000000000..22a32b133e95 --- /dev/null +++ b/jps/model-serialization/testData/compilerConfigurationDir/.idea/validation.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java index 787e89b5a3fe..d935074c811c 100644 --- a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java +++ b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java @@ -17,10 +17,7 @@ package org.jetbrains.jps.model.serialization; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.jps.model.java.JpsJavaExtensionService; -import org.jetbrains.jps.model.java.compiler.JpsCompilerExcludes; -import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerConfiguration; -import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions; -import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; +import org.jetbrains.jps.model.java.compiler.*; import org.jetbrains.jps.util.JpsPathUtil; import java.io.File; @@ -72,6 +69,12 @@ public class JpsCompilerConfigurationTest extends JpsSerializationTestCase { assertEquals(2, override.size()); assertEquals("-param_1", override.get("mod_1")); assertEquals("-param_2", override.get("mod_2")); + + JpsValidationConfiguration validationConfiguration = configuration.getValidationConfiguration(); + assertTrue(validationConfiguration.isValidateOnBuild()); + assertTrue(validationConfiguration.isValidatorEnabled("Jasper Validator")); + assertFalse(validationConfiguration.isValidatorEnabled("Hibernate Validator")); + assertTrue(validationConfiguration.isValidatorEnabled("JPA Validator")); } private boolean isExcluded(JpsCompilerExcludes excludes, final String path) {