mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
jps: make validator configuration available via JpsModel
This is required to implement JSP Validation in external build process (IDEA-206443).
This commit is contained in:
@@ -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<Compiler> validators = getValidators();
|
||||
Collections.sort(validators, Comparator.comparing(Compiler::getDescription));
|
||||
myValidators.setElements(validators, false);
|
||||
|
||||
@@ -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<ValidationConfiguration> {
|
||||
|
||||
public boolean VALIDATE_ON_BUILD = false;
|
||||
public Map<String, Boolean> VALIDATORS = new HashMap<>();
|
||||
@State(name = JpsValidationSerializer.COMPONENT_NAME, storages = @Storage(JpsValidationSerializer.CONFIG_FILE_NAME))
|
||||
public class ValidationConfiguration implements PersistentStateComponent<JpsValidationSerializer.ValidationConfigurationState> {
|
||||
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<Validat
|
||||
}
|
||||
|
||||
public boolean isSelected(String validatorDescription) {
|
||||
final Boolean selected = VALIDATORS.get(validatorDescription);
|
||||
final Boolean selected = myState.VALIDATORS.get(validatorDescription);
|
||||
return selected == null || selected.booleanValue();
|
||||
}
|
||||
|
||||
public boolean isValidateOnBuild() {
|
||||
return myState.VALIDATE_ON_BUILD;
|
||||
}
|
||||
|
||||
public void setValidateOnBuild(boolean value) {
|
||||
myState.VALIDATE_ON_BUILD = value;
|
||||
}
|
||||
|
||||
public void setSelected(Compiler validator, boolean selected) {
|
||||
setSelected(validator.getDescription(), selected);
|
||||
}
|
||||
|
||||
public void setSelected(String validatorDescription, boolean selected) {
|
||||
VALIDATORS.put(validatorDescription, selected);
|
||||
myState.VALIDATORS.put(validatorDescription, selected);
|
||||
}
|
||||
|
||||
public static ValidationConfiguration getInstance(Project project) {
|
||||
@@ -57,13 +61,14 @@ public class ValidationConfiguration implements PersistentStateComponent<Validat
|
||||
}
|
||||
|
||||
@Override
|
||||
public ValidationConfiguration getState() {
|
||||
return this;
|
||||
@NotNull
|
||||
public JpsValidationSerializer.ValidationConfigurationState getState() {
|
||||
return myState;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadState(@NotNull final ValidationConfiguration state) {
|
||||
XmlSerializerUtil.copyBean(state, this);
|
||||
public void loadState(@NotNull final JpsValidationSerializer.ValidationConfigurationState state) {
|
||||
XmlSerializerUtil.copyBean(state, myState);
|
||||
}
|
||||
|
||||
@State(
|
||||
|
||||
+6
@@ -23,6 +23,7 @@ import org.jetbrains.jps.model.module.JpsModule;
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
@@ -43,6 +44,11 @@ public interface JpsJavaCompilerConfiguration extends JpsElement {
|
||||
@NotNull
|
||||
JpsCompilerExcludes getValidationExcludes();
|
||||
|
||||
@NotNull
|
||||
JpsValidationConfiguration getValidationConfiguration();
|
||||
|
||||
void setValidationConfiguration(boolean validateOnBuild, @NotNull Set<String> disabledValidators);
|
||||
|
||||
@NotNull
|
||||
ProcessorConfigProfile getDefaultAnnotationProcessingProfile();
|
||||
ProcessorConfigProfile addAnnotationProcessingProfile();
|
||||
|
||||
+8
@@ -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);
|
||||
}
|
||||
+13
-4
@@ -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<Jp
|
||||
private String myJavaCompilerId = "Javac";
|
||||
private Map<JpsModule, ProcessorConfigProfile> myAnnotationProcessingProfileMap;
|
||||
private ResourcePatterns myCompiledPatterns;
|
||||
private JpsValidationConfiguration myValidationConfiguration = new JpsValidationConfigurationImpl(false, Collections.emptySet());
|
||||
|
||||
public JpsJavaCompilerConfigurationImpl() {
|
||||
}
|
||||
@@ -105,6 +103,17 @@ public class JpsJavaCompilerConfigurationImpl extends JpsCompositeElementBase<Jp
|
||||
return myValidationExcludes;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JpsValidationConfiguration getValidationConfiguration() {
|
||||
return myValidationConfiguration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValidationConfiguration(boolean validateOnBuild, @NotNull Set<String> disabledValidators) {
|
||||
myValidationConfiguration = new JpsValidationConfigurationImpl(validateOnBuild, disabledValidators);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ProcessorConfigProfile getDefaultAnnotationProcessingProfile() {
|
||||
|
||||
+26
@@ -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<String> myDisabledValidators;
|
||||
|
||||
public JpsValidationConfigurationImpl(boolean validateOnBuild, Set<String> disabledValidators) {
|
||||
myValidateOnBuild = validateOnBuild;
|
||||
myDisabledValidators = disabledValidators;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidateOnBuild() {
|
||||
return myValidateOnBuild;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidatorEnabled(String validatorId) {
|
||||
return !myDisabledValidators.contains(validatorId);
|
||||
}
|
||||
}
|
||||
+1
@@ -98,6 +98,7 @@ public class JpsJavaModelSerializerExtension extends JpsModelSerializerExtension
|
||||
public List<? extends JpsProjectExtensionSerializer> getProjectExtensionSerializers() {
|
||||
return Arrays.asList(new JavaProjectExtensionSerializer(),
|
||||
new JpsJavaCompilerConfigurationSerializer(),
|
||||
new JpsValidationSerializer(),
|
||||
new JpsJavaCompilerNotNullableSerializer(),
|
||||
new JpsCompilerValidationExcludeSerializer(),
|
||||
new JpsJavaCompilerWorkspaceConfigurationSerializer(),
|
||||
|
||||
+44
@@ -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<String> 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<String, Boolean> VALIDATORS = new HashMap<>();
|
||||
}
|
||||
}
|
||||
@@ -55,5 +55,14 @@
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
<component name="ValidationConfiguration">
|
||||
<option name="VALIDATE_ON_BUILD" value="true" />
|
||||
<option name="VALIDATORS">
|
||||
<map>
|
||||
<entry key="Hibernate Validator" value="false" />
|
||||
<entry key="Jasper Validator" value="true" />
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ValidationConfiguration">
|
||||
<option name="VALIDATE_ON_BUILD" value="true" />
|
||||
<option name="VALIDATORS">
|
||||
<map>
|
||||
<entry key="Hibernate Validator" value="false" />
|
||||
<entry key="Jasper Validator" value="true" />
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
+7
-4
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user