mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
LSP-345 fix ClassCastException when formatting a Java file with comments
The formatting code (AbstractJavaBlock#createJavaBlock) was using the deprecated InjectedLanguageUtil#hasInjections, which internally cast InjectedLanguageManager to InjectedLanguageManagerImpl. This failed in environments using CoreInjectedLanguageManager instead of InjectedLanguageManagerImpl, like the LSP. I replaced the usage of InjectedLanguageUtil#hasInjections with `injectedLanguageManager.getInjectedPsiFiles() != null` (just like the Javadoc of InjectedLanguageUtil#hasInjections suggests). The root issue is that InjectedLanguageUtilBase#probeElementsUpInner calls InjectedLanguageManagerImpl#getInstanceImpl, which in an antipattern: dependency on a specific implementation instead of the public interface. GitOrigin-RevId: 1474f0d2a26800e8d49e0ea2bcd7b8da6d5cd83c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1d07bcc7ac
commit
7cdd6b1cbe
@@ -4,6 +4,7 @@ package com.intellij.psi.formatter.java;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.formatting.alignment.AlignmentStrategy;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -16,7 +17,6 @@ import com.intellij.psi.formatter.java.wrap.ReservedWrapsProvider;
|
||||
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
|
||||
import com.intellij.psi.impl.source.codeStyle.ShiftIndentInsideHelper;
|
||||
import com.intellij.psi.impl.source.tree.*;
|
||||
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
|
||||
import com.intellij.psi.impl.source.tree.java.ClassElement;
|
||||
import com.intellij.psi.javadoc.PsiMarkdownCodeBlock;
|
||||
import com.intellij.psi.jsp.JspClassLevelDeclarationStatementType;
|
||||
@@ -198,11 +198,11 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
if (isStatement(child, child.getTreeParent())) {
|
||||
return new CodeBlockBlock(child, wrap, alignment, actualIndent, settings, javaSettings, myFormattingMode);
|
||||
}
|
||||
if (!isBuildIndentsOnly() &&
|
||||
child instanceof PsiComment &&
|
||||
child instanceof PsiLanguageInjectionHost &&
|
||||
InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)child)) {
|
||||
return new CommentWithInjectionBlock(child, wrap, alignment, indent, settings, javaSettings, formattingMode);
|
||||
if (!isBuildIndentsOnly() && child instanceof PsiComment && child instanceof PsiLanguageInjectionHost psiLanguageInjectionHost) {
|
||||
InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(childPsi.getProject());
|
||||
if (injectedLanguageManager.getInjectedPsiFiles(psiLanguageInjectionHost) != null) {
|
||||
return new CommentWithInjectionBlock(child, wrap, alignment, indent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
}
|
||||
if (child instanceof LeafElement || child instanceof PsiMarkdownCodeBlock) {
|
||||
if (child.getElementType() == JavaTokenType.C_STYLE_COMMENT) {
|
||||
|
||||
Reference in New Issue
Block a user