mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
expression-statement applicability conflict resolved
This commit is contained in:
@@ -98,28 +98,7 @@ public abstract class JavaCodeContextType extends TemplateContextType {
|
||||
}
|
||||
|
||||
private static boolean isStatementContext(PsiElement element) {
|
||||
if (!(element.getParent() instanceof PsiReferenceExpression)) {
|
||||
return false;
|
||||
}
|
||||
if (((PsiReferenceExpression)element.getParent()).isQualified()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (element.getParent().getParent() instanceof PsiExpressionStatement) {
|
||||
if (
|
||||
psiElement().afterLeaf(
|
||||
psiElement().inside(
|
||||
psiElement(PsiExpression.class).afterLeaf(
|
||||
psiElement().withText("(").withParent(PsiIfStatement.class))))
|
||||
.accepts(element)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return Expression.isExpressionContext(element) && element.getParent().getParent() instanceof PsiExpressionStatement;
|
||||
}
|
||||
}
|
||||
public static class Expression extends JavaCodeContextType {
|
||||
@@ -129,6 +108,10 @@ public abstract class JavaCodeContextType extends TemplateContextType {
|
||||
|
||||
@Override
|
||||
protected boolean isInContext(@NotNull PsiElement element) {
|
||||
return isExpressionContext(element);
|
||||
}
|
||||
|
||||
private static boolean isExpressionContext(PsiElement element) {
|
||||
final PsiElement parent = element.getParent();
|
||||
if (!(parent instanceof PsiReferenceExpression)) {
|
||||
return false;
|
||||
@@ -139,6 +122,14 @@ public abstract class JavaCodeContextType extends TemplateContextType {
|
||||
if (parent.getParent() instanceof PsiMethodCallExpression) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
psiElement().afterLeaf(
|
||||
psiElement().inside(
|
||||
psiElement(PsiExpression.class).afterLeaf(
|
||||
psiElement().withText("(").withParent(PsiIfStatement.class))))
|
||||
.accepts(element)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,9 +17,7 @@
|
||||
package com.intellij.codeInsight.template;
|
||||
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.PairProcessor;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -51,9 +49,6 @@ public abstract class TemplateManager {
|
||||
|
||||
public abstract boolean startTemplate(@NotNull Editor editor, char shortcutChar);
|
||||
|
||||
public abstract TemplateContextType getContextType(@NotNull PsiFile file, int offset);
|
||||
public abstract TemplateContextType getContextType(@NotNull FileType fileType);
|
||||
|
||||
public abstract Template createTemplate(@NotNull String key, String group);
|
||||
|
||||
public abstract Template createTemplate(@NotNull String key, String group, @NonNls String text);
|
||||
|
||||
+12
-15
@@ -430,11 +430,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
return result;
|
||||
}
|
||||
|
||||
public TemplateContextType getContextType(@NotNull PsiFile file, int offset) {
|
||||
return getContextType(file, offset, null);
|
||||
}
|
||||
|
||||
private static TemplateContextType getContextType(@Nullable PsiFile file, int offset, @Nullable FileType fileType) {
|
||||
private static boolean isEnabled(@Nullable PsiFile file, int offset, @Nullable FileType fileType, TemplateContext context) {
|
||||
LinkedHashSet<TemplateContextType> set = new LinkedHashSet<TemplateContextType>();
|
||||
LinkedList<TemplateContextType> contexts = buildOrderedContextTypes();
|
||||
for (TemplateContextType contextType : contexts) {
|
||||
@@ -450,7 +446,13 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
continue removeBases;
|
||||
}
|
||||
}
|
||||
return set.iterator().next();
|
||||
|
||||
for (TemplateContextType type : set) {
|
||||
if (context.isEnabled(type)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -468,11 +470,6 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
return userDefinedExtensionsFirst;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TemplateContextType getContextType(@NotNull FileType fileType) {
|
||||
return getContextType(null, 0, fileType);
|
||||
}
|
||||
|
||||
public static TemplateContextType[] getAllContextTypes() {
|
||||
return Extensions.getExtensions(TemplateContextType.EP_NAME);
|
||||
}
|
||||
@@ -491,7 +488,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
public static boolean isApplicable(PsiFile file, int offset, TemplateImpl template) {
|
||||
TemplateManager instance = getInstance(file.getProject());
|
||||
TemplateContext context = template.getTemplateContext();
|
||||
if (context.isEnabled(instance.getContextType(file, offset))) {
|
||||
if (isEnabled(file, offset, null, context)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -499,7 +496,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
|
||||
if (baseLanguage != file.getLanguage()) {
|
||||
PsiFile basePsi = file.getViewProvider().getPsi(baseLanguage);
|
||||
if (basePsi != null && context.isEnabled(instance.getContextType(basePsi, offset))) {
|
||||
if (basePsi != null && isEnabled(basePsi, offset, null, context)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -508,7 +505,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
if (baseLanguageForBaseLanguage != null) {
|
||||
final LanguageFileType associatedFileType = baseLanguageForBaseLanguage.getAssociatedFileType();
|
||||
if (associatedFileType != null && associatedFileType != file.getFileType()) {
|
||||
if (context.isEnabled(instance.getContextType(associatedFileType))) {
|
||||
if (isEnabled(null, 0, associatedFileType, context)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -519,7 +516,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
if (offset > 0) {
|
||||
final Language prevLanguage = PsiUtilBase.getLanguageAtOffset(file, offset - 1);
|
||||
final PsiFile prevPsi = file.getViewProvider().getPsi(prevLanguage);
|
||||
if (prevPsi != null && context.isEnabled(instance.getContextType(prevPsi, offset - 1))) {
|
||||
if (prevPsi != null && isEnabled(prevPsi, offset - 1, null, context)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user