mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Folding: add replacing with inferred type for var as folding: IDEA-194935
This commit is contained in:
+2
@@ -39,6 +39,8 @@ public class JavaCodeFoldingOptionsProvider extends BeanConfigurable<JavaCodeFol
|
||||
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.generic.constructor.parameters"), settings::isCollapseConstructorGenericParameters, settings::setCollapseConstructorGenericParameters);
|
||||
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.inferred.type"), settings::isReplaceVarWithInferredType, settings::setReplaceVarWithInferredType);
|
||||
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.i18n.messages"), settings::isCollapseI18nMessages, settings::setCollapseI18nMessages);
|
||||
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.suppress.warnings"), settings::isCollapseSuppressWarnings, settings::setCollapseSuppressWarnings);
|
||||
|
||||
@@ -65,4 +65,7 @@ public abstract class JavaCodeFoldingSettings {
|
||||
|
||||
public abstract boolean isCollapseEndOfLineComments();
|
||||
public abstract void setCollapseEndOfLineComments(boolean value);
|
||||
|
||||
public abstract boolean isReplaceVarWithInferredType();
|
||||
public abstract void setReplaceVarWithInferredType(boolean value);
|
||||
}
|
||||
|
||||
+11
@@ -29,6 +29,7 @@ public class JavaCodeFoldingSettingsBase extends JavaCodeFoldingSettings {
|
||||
private boolean COLLAPSE_I18N_MESSAGES = true;
|
||||
private boolean COLLAPSE_SUPPRESS_WARNINGS = true;
|
||||
private boolean COLLAPSE_END_OF_LINE_COMMENTS;
|
||||
private boolean REPLACE_VAR_WITH_INFERRED_TYPE = false;
|
||||
|
||||
@Override
|
||||
public boolean isCollapseImports() {
|
||||
@@ -168,4 +169,14 @@ public class JavaCodeFoldingSettingsBase extends JavaCodeFoldingSettings {
|
||||
public void setCollapseEndOfLineComments(boolean value) {
|
||||
COLLAPSE_END_OF_LINE_COMMENTS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReplaceVarWithInferredType() {
|
||||
return REPLACE_VAR_WITH_INFERRED_TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setReplaceVarWithInferredType(boolean value) {
|
||||
REPLACE_VAR_WITH_INFERRED_TYPE = value;
|
||||
}
|
||||
}
|
||||
|
||||
+21
-1
@@ -269,6 +269,17 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
addTypeParametersFolding(list, document, parameterList, 3, quick);
|
||||
}
|
||||
|
||||
private static void addLocalVariableTypeFolding(@NotNull List<? super FoldingDescriptor> list,
|
||||
@NotNull PsiVariable expression,
|
||||
boolean quick) {
|
||||
if (quick) return; // presentable text may require resolve
|
||||
PsiTypeElement typeElement = expression.getTypeElement();
|
||||
if (typeElement == null) return;
|
||||
if (!typeElement.isInferredType()) return;
|
||||
String presentableText = expression.getType().getPresentableText();
|
||||
list.add(new NamedFoldingDescriptor(typeElement.getNode(), typeElement.getTextRange(), null, presentableText, true, Collections.emptySet()));
|
||||
}
|
||||
|
||||
private static boolean resolvesCorrectly(@NotNull PsiReferenceExpression expression) {
|
||||
for (final JavaResolveResult result : expression.multiResolve(true)) {
|
||||
if (!result.isValidResult()) {
|
||||
@@ -550,7 +561,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
}
|
||||
|
||||
PsiCodeBlock body = method.getBody();
|
||||
if (body != null && !oneLiner) {
|
||||
if (body != null) {
|
||||
addCodeBlockFolds(list, body, processedComments, document, quick);
|
||||
}
|
||||
}
|
||||
@@ -678,6 +689,15 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLocalVariable(PsiLocalVariable variable) {
|
||||
if (!dumb && JavaCodeFoldingSettings.getInstance().isReplaceVarWithInferredType()) {
|
||||
addLocalVariableTypeFolding(list, variable, quick);
|
||||
}
|
||||
|
||||
super.visitLocalVariable(variable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodCallExpression(PsiMethodCallExpression expression) {
|
||||
if (!dumb) {
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
// Copyright 2000-2018 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 com.intellij.java.codeInsight.folding
|
||||
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
|
||||
class JavaFolding10Test : JavaFoldingTestCase() {
|
||||
override fun getProjectDescriptor(): LightProjectDescriptor = JAVA_10
|
||||
|
||||
fun testLocalVariable() {
|
||||
val text = """
|
||||
class A {
|
||||
void test() {
|
||||
var x = "FOO";
|
||||
}
|
||||
}""".trimIndent()
|
||||
configure(text)
|
||||
|
||||
val regions = myFixture.editor.foldingModel.allFoldRegions
|
||||
assertThat(regions).hasSize(3)
|
||||
|
||||
val region = regions[1]
|
||||
assertThat(region.placeholderText).isEqualTo("String")
|
||||
}
|
||||
}
|
||||
@@ -398,6 +398,7 @@ checkbox.collapse.data.uri=Data URIs
|
||||
checkbox.collapse.anonymous.classes=<html>Anonymous classes</html>
|
||||
checkbox.collapse.closures=<html>"Closures" (anonymous classes implementing one method, before Java 8)</html>
|
||||
checkbox.collapse.generic.constructor.parameters=<html>Generic constructor and method parameters</html>
|
||||
checkbox.collapse.inferred.type=<html>Replace 'var' with inferred type</html>
|
||||
checkbox.collapse.i18n.messages=<html>I18n strings</html>
|
||||
checkbox.collapse.annotations=<html>Annotations</html>
|
||||
checkbox.collapse.inner.classes=Inner classes
|
||||
|
||||
Reference in New Issue
Block a user