naming conventions: preserve unknown settings

This commit is contained in:
Anna.Kozlova
2017-10-19 20:43:13 +02:00
parent 1f08fb63f4
commit 936fecbe41
2 changed files with 43 additions and 2 deletions
@@ -462,6 +462,35 @@ public class InspectionProfileTest extends LightIdeaTestCase {
assertThat(importedProfile.writeScheme()).isEqualTo(mergedElement);
}
public void testKeepUnloadedMergeNamingConventions() throws Exception {
String unchanged = "<profile version=\"1.0\">\n" +
" <option name=\"myName\" value=\"ToConvert\" />\n" +
" <inspection_tool class=\"NewClassNamingConvention\" enabled=\"true\" level=\"WARNING\" enabled_by_default=\"true\">\n" +
" <extension name=\"AnnotationNamingConvention\" enabled=\"true\">\n" +
" <option name=\"inheritDefaultSettings\" value=\"false\" />\n" +
" <option name=\"m_regex\" value=\"[A-Z][A-Za-z\\d]*\" />\n" +
" <option name=\"m_minLength\" value=\"8\" />\n" +
" <option name=\"m_maxLength\" value=\"66\" />\n" +
" </extension>\n" +
" <extension name=\"AnnotationNamingConventionUnknown\" enabled=\"true\">\n" +
" <option name=\"m_regex\" value=\"[A-Z][A-Za-z\\d]*\" />\n" +
" <option name=\"m_minLength\" value=\"8\" />\n" +
" <option name=\"m_maxLength\" value=\"66\" />\n" +
" </extension>\n" +
" <extension name=\"ClassNamingConvention\" enabled=\"true\">\n" +
" <option name=\"m_regex\" value=\"[A-Z][A-Za-z\\d]*\" />\n" +
" <option name=\"m_minLength\" value=\"8\" />\n" +
" <option name=\"m_maxLength\" value=\"66\" />\n" +
" </extension>\n" +
" </inspection_tool>\n" +
"</profile>";
final Element allEnabledProfile = JdomKt.loadElement(unchanged);
InspectionProfileImpl profile = createProfile(new InspectionProfileImpl("foo"));
profile.readExternal(allEnabledProfile);
profile.initInspectionTools();
assertEquals(unchanged, serialize(profile));
}
public void testMergeMethodNamingConventions() throws Exception {
final Element element = JdomKt.loadElement("<profile version=\"1.0\">\n" +
" <option name=\"myName\" value=\"" + PROFILE + "\" />\n" +
@@ -40,6 +40,7 @@ public abstract class AbstractNamingConventionInspection<T extends PsiNameIdenti
private final Map<String, NamingConvention<T>> myNamingConventions = new LinkedHashMap<>();
private final Map<String, NamingConventionBean> myNamingConventionBeans = new LinkedHashMap<>();
private final Map<String, Element> myUnloadedElements = new LinkedHashMap<>();
private final Set<String> myDisabledShortNames = new HashSet<>();
@Nullable private final String myDefaultConventionShortName;
@@ -88,6 +89,10 @@ public abstract class AbstractNamingConventionInspection<T extends PsiNameIdenti
String shortName = extension.getAttributeValue("name");
if (shortName == null) continue;
NamingConventionBean conventionBean = myNamingConventionBeans.get(shortName);
if (conventionBean == null) {
myUnloadedElements.put(shortName, extension);
continue;
}
try {
XmlSerializer.deserializeInto(conventionBean, extension);
conventionBean.initPattern();
@@ -104,8 +109,15 @@ public abstract class AbstractNamingConventionInspection<T extends PsiNameIdenti
@Override
public void writeSettings(@NotNull Element node) {
for (NamingConvention<T> convention : myNamingConventions.values()) {
String shortName = convention.getShortName();
Set<String> shortNames = new TreeSet<>(myNamingConventions.keySet());
shortNames.addAll(myUnloadedElements.keySet());
for (String shortName : shortNames) {
NamingConvention<T> convention = myNamingConventions.get(shortName);
if (convention == null) {
Element element = myUnloadedElements.get(shortName);
if (element != null) node.addContent(element.clone());
continue;
}
boolean disabled = myDisabledShortNames.contains(shortName);
Element element = new Element("extension")
.setAttribute("name", shortName)