java: IdeJavaFoldingBuilderBase on frontend (part of java folding builder which doesn't depend on resolve) IJPL-185110

GitOrigin-RevId: 1932afe8a0a18e0a475d047461bf5e158761e35a
This commit is contained in:
Dmitry Batkovich
2025-04-23 20:11:43 +00:00
committed by intellij-monorepo-bot
parent 3f520e829a
commit 210b056678
5 changed files with 40 additions and 27 deletions
@@ -64,6 +64,9 @@
<lang.lineWrapStrategy language="JAVA" implementationClass="com.intellij.psi.formatter.java.JavaLineWrapPositionStrategy"/>
<applicationService serviceInterface="com.intellij.codeInsight.folding.JavaCodeFoldingSettings"
serviceImplementation="com.intellij.codeInsight.folding.impl.JavaCodeFoldingSettingsImpl"/>
<registryKey key="java.formatter.chained.calls.pre212.compatibility"
defaultValue="false"
description="Format chained calls as in versions prior to 2021.2"/>
@@ -0,0 +1,33 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.folding.impl
import com.intellij.lang.java.JavaLanguage
import com.intellij.openapi.editor.colors.EditorColors
import com.intellij.openapi.editor.ex.util.EditorUtil
import com.intellij.psi.*
import com.intellij.psi.codeStyle.CodeStyleSettings
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
open class IdeJavaFoldingBuilderBase: JavaFoldingBuilderBase() {
override fun isBelowRightMargin(file: PsiFile, lineLength: Int): Boolean {
val settings: CodeStyleSettings = com.intellij.application.options.CodeStyle.getSettings(file)
return lineLength <= settings.getRightMargin(JavaLanguage.INSTANCE)
}
protected open override fun shouldShowExplicitLambdaType(anonymousClass: PsiAnonymousClass, expression: PsiNewExpression): Boolean {
val parent = expression.getParent()
return parent is PsiReferenceExpression || parent is PsiAssignmentExpression
}
protected override fun rightArrow(): String {
return getRightArrow()
}
companion object {
@JvmStatic
fun getRightArrow(): String {
return EditorUtil.displayCharInEditor('\u2192', EditorColors.FOLDED_TEXT_ATTRIBUTES, "->")
}
}
}
@@ -400,8 +400,6 @@
<applicationService
serviceInterface="com.intellij.codeInsight.generation.OverrideImplementExploreUtil$MemberImplementorExplorersProvider"
serviceImplementation="com.intellij.codeInsight.generation.MemberImplementorExplorersProviderImpl"/>
<applicationService serviceInterface="com.intellij.codeInsight.folding.JavaCodeFoldingSettings"
serviceImplementation="com.intellij.codeInsight.folding.impl.JavaCodeFoldingSettingsImpl"/>
<applicationService serviceInterface="com.intellij.psi.CommonReferenceProviderTypes"
serviceImplementation="com.intellij.psi.impl.CommonReferenceProviderTypesImpl"/>
<applicationService serviceInterface="com.intellij.psi.impl.file.PsiPackageImplementationHelper"
@@ -1,41 +1,20 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.folding.impl;
import com.intellij.application.options.CodeStyle;
import com.intellij.codeInsight.ExpectedTypeInfo;
import com.intellij.codeInsight.ExpectedTypesProvider;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.editor.ex.util.EditorUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.PsiAnonymousClass;
import com.intellij.psi.PsiNewExpression;
import org.jetbrains.annotations.NotNull;
public final class JavaFoldingBuilder extends JavaFoldingBuilderBase {
@Override
protected boolean isBelowRightMargin(@NotNull PsiFile file, int lineLength) {
final CodeStyleSettings settings = CodeStyle.getSettings(file);
return lineLength <= settings.getRightMargin(JavaLanguage.INSTANCE);
}
public final class JavaFoldingBuilder extends IdeJavaFoldingBuilderBase {
@Override
protected boolean shouldShowExplicitLambdaType(@NotNull PsiAnonymousClass anonymousClass, @NotNull PsiNewExpression expression) {
PsiElement parent = expression.getParent();
if (parent instanceof PsiReferenceExpression || parent instanceof PsiAssignmentExpression) {
if (super.shouldShowExplicitLambdaType(anonymousClass, expression)) {
return true;
}
ExpectedTypeInfo[] types = ExpectedTypesProvider.getExpectedTypes(expression, false);
return types.length != 1 || !types[0].getType().equals(anonymousClass.getBaseClassType());
}
@Override
protected @NotNull String rightArrow() {
return getRightArrow();
}
public static @NotNull String getRightArrow() {
return EditorUtil.displayCharInEditor('\u2192', EditorColors.FOLDED_TEXT_ATTRIBUTES, "->");
}
}