From c355f73bc897635b46540e03ba3d6a858ee77a85 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 5 Aug 2016 13:31:41 +0300 Subject: [PATCH] properties: add strip trailing spaces filter support (IDEA-150401) --- .../PsiBasedStripTrailingSpacesFilter.java | 5 +- plugins/properties/src/META-INF/plugin.xml | 2 + ...rtiesStripTrailingSpacesFilterFactory.java | 56 +++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 plugins/properties/src/com/intellij/lang/properties/formatting/PropertiesStripTrailingSpacesFilterFactory.java diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/PsiBasedStripTrailingSpacesFilter.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/PsiBasedStripTrailingSpacesFilter.java index f01efd38a08e..43702487e004 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/PsiBasedStripTrailingSpacesFilter.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/PsiBasedStripTrailingSpacesFilter.java @@ -101,9 +101,12 @@ public abstract class PsiBasedStripTrailingSpacesFilter implements StripTrailing return null; } - protected final void disableRange(@NotNull TextRange range) { + protected final void disableRange(@NotNull TextRange range, boolean includeEndLine) { int startLine = myDocument.getLineNumber(range.getStartOffset()); int endLine = myDocument.getLineNumber(range.getEndOffset()); + if (includeEndLine) { + endLine++; + } myDisabledLinesBitSet.set(startLine, endLine); } } diff --git a/plugins/properties/src/META-INF/plugin.xml b/plugins/properties/src/META-INF/plugin.xml index 39790e977e67..e2fda174227b 100644 --- a/plugins/properties/src/META-INF/plugin.xml +++ b/plugins/properties/src/META-INF/plugin.xml @@ -118,6 +118,8 @@ + + diff --git a/plugins/properties/src/com/intellij/lang/properties/formatting/PropertiesStripTrailingSpacesFilterFactory.java b/plugins/properties/src/com/intellij/lang/properties/formatting/PropertiesStripTrailingSpacesFilterFactory.java new file mode 100644 index 000000000000..d9e47c0fc1d8 --- /dev/null +++ b/plugins/properties/src/com/intellij/lang/properties/formatting/PropertiesStripTrailingSpacesFilterFactory.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.lang.properties.formatting; + +import com.intellij.lang.ASTNode; +import com.intellij.lang.Language; +import com.intellij.lang.StdLanguages; +import com.intellij.lang.properties.psi.impl.PropertyImpl; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.impl.PsiBasedStripTrailingSpacesFilter; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiRecursiveElementVisitor; +import org.jetbrains.annotations.NotNull; + +public class PropertiesStripTrailingSpacesFilterFactory extends PsiBasedStripTrailingSpacesFilter.Factory { + @NotNull + @Override + protected PsiBasedStripTrailingSpacesFilter createFilter(@NotNull Document document) { + return new PsiBasedStripTrailingSpacesFilter(document) { + @Override + protected void process(@NotNull PsiFile psiFile) { + new PsiRecursiveElementVisitor() { + @Override + public void visitElement(PsiElement element) { + if (element instanceof PropertyImpl) { + final ASTNode valueNode = ((PropertyImpl)element).getValueNode(); + if (valueNode != null) { + disableRange(valueNode.getTextRange(), true); + } + } + super.visitElement(element); + } + }.visitElement(psiFile); + } + }; + } + + @Override + protected boolean isApplicableTo(@NotNull Language language) { + return language.is(StdLanguages.PROPERTIES); + } +}