mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 23:39:39 +07:00
make GenerationInfo.getPsiMember nullable (IDEA-CR-34000, EA-107687)
This commit is contained in:
@@ -177,7 +177,7 @@ public class JavaGenerateMemberCompletionContributor {
|
||||
final List<PsiElement> elements = new ArrayList<>();
|
||||
for (GenerationInfo member : newInfos) {
|
||||
if (!(member instanceof TemplateGenerationInfo)) {
|
||||
elements.add(member.getPsiMember());
|
||||
ContainerUtil.addIfNotNull(elements, member.getPsiMember());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ import org.jetbrains.java.generate.exception.GenerateCodeException;
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public abstract class GenerateMembersHandlerBase implements CodeInsightActionHandler, ContextAwareActionHandler {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.generation.GenerateMembersHandlerBase");
|
||||
@@ -140,8 +141,8 @@ public abstract class GenerateMembersHandlerBase implements CodeInsightActionHan
|
||||
else {
|
||||
final List<PsiElement> elements = new ArrayList<>();
|
||||
for (GenerationInfo member : newMembers) {
|
||||
if (!(member instanceof TemplateGenerationInfo) && member.isMemberValid()) {
|
||||
elements.add(member.getPsiMember());
|
||||
if (!(member instanceof TemplateGenerationInfo)) {
|
||||
ContainerUtil.addIfNotNull(elements, member.getPsiMember());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,7 +172,7 @@ public abstract class GenerateMembersHandlerBase implements CodeInsightActionHan
|
||||
TemplateGenerationInfo info = templates.get(index);
|
||||
final Template template = info.getTemplate();
|
||||
|
||||
final PsiElement element = info.getPsiMember();
|
||||
PsiElement element = Objects.requireNonNull(info.getPsiMember());
|
||||
final TextRange range = element.getTextRange();
|
||||
WriteAction.run(() -> editor.getDocument().deleteString(range.getStartOffset(), range.getEndOffset()));
|
||||
int offset = range.getStartOffset();
|
||||
|
||||
@@ -33,7 +33,6 @@ public abstract class GenerationInfoBase implements GenerationInfo {
|
||||
@Override
|
||||
public abstract void insert(@NotNull PsiClass aClass, PsiElement anchor, boolean before) throws IncorrectOperationException;
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public abstract PsiMember getPsiMember();
|
||||
|
||||
@@ -62,8 +61,9 @@ public abstract class GenerationInfoBase implements GenerationInfo {
|
||||
|
||||
@Override
|
||||
public void positionCaret(@NotNull Editor editor, boolean toEditMethodBody) {
|
||||
if (isMemberValid()) {
|
||||
GenerateMembersUtil.positionCaret(editor, getPsiMember(), toEditMethodBody);
|
||||
PsiMember member = getPsiMember();
|
||||
if (member != null) {
|
||||
GenerateMembersUtil.positionCaret(editor, member, toEditMethodBody);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,10 +19,11 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
@@ -44,20 +45,14 @@ public class PsiGenerationInfo<T extends PsiMember> extends GenerationInfoBase i
|
||||
myMember = SmartPointerManager.getInstance(member.getProject()).createSmartPsiElementPointer(member);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public final T getPsiMember() {
|
||||
return ObjectUtils.assertNotNull(myMember.getElement());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMemberValid() {
|
||||
return myMember.getElement() != null;
|
||||
return myMember.getElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insert(@NotNull final PsiClass aClass, @Nullable PsiElement anchor, boolean before) throws IncorrectOperationException {
|
||||
T member = getPsiMember();
|
||||
T member = Objects.requireNonNull(getPsiMember());
|
||||
final PsiMember existingMember;
|
||||
if (member instanceof PsiField) {
|
||||
existingMember = aClass.findFieldByName(member.getName(), false);
|
||||
|
||||
@@ -20,9 +20,10 @@ import com.intellij.codeInsight.template.Template;
|
||||
import com.intellij.codeInsight.template.TemplateBuilderImpl;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public abstract class TemplateGenerationInfo extends GenerationInfoBase implements GenerationInfo {
|
||||
private final Expression myExpression;
|
||||
private SmartPsiElementPointer<PsiMethod> myElement;
|
||||
@@ -38,24 +39,19 @@ public abstract class TemplateGenerationInfo extends GenerationInfoBase implemen
|
||||
|
||||
protected abstract PsiElement getTemplateElement(PsiMethod method);
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiMethod getPsiMember() {
|
||||
return ObjectUtils.assertNotNull(myElement.getElement());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMemberValid() {
|
||||
return myElement.getElement() != null;
|
||||
return myElement.getElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insert(@NotNull PsiClass aClass, PsiElement anchor, boolean before) throws IncorrectOperationException {
|
||||
setElement((PsiMethod)GenerateMembersUtil.insert(aClass, getPsiMember(), anchor, before));
|
||||
PsiMethod member = Objects.requireNonNull(getPsiMember());
|
||||
setElement((PsiMethod)GenerateMembersUtil.insert(aClass, member, anchor, before));
|
||||
}
|
||||
|
||||
public Template getTemplate() {
|
||||
PsiMethod element = getPsiMember();
|
||||
PsiMethod element = Objects.requireNonNull(getPsiMember());
|
||||
TemplateBuilderImpl builder = new TemplateBuilderImpl(element);
|
||||
builder.replaceElement(getTemplateElement(element), myExpression);
|
||||
return builder.buildTemplate();
|
||||
|
||||
@@ -31,13 +31,12 @@ public interface GenerationInfo {
|
||||
|
||||
void insert(@NotNull PsiClass aClass, @Nullable PsiElement anchor, boolean before) throws IncorrectOperationException;
|
||||
|
||||
@NotNull
|
||||
/**
|
||||
* @return the associated PSI member or null if it has become invalid
|
||||
*/
|
||||
@Nullable
|
||||
PsiMember getPsiMember();
|
||||
|
||||
default boolean isMemberValid() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param leaf leaf element. Is guaranteed to be a tree descendant of aClass.
|
||||
* @return the value that will be passed to the {@link #insert(PsiClass, PsiElement, boolean)} method later.
|
||||
|
||||
@@ -138,7 +138,7 @@ public class GroovyGenerationInfo<T extends PsiMember> extends PsiGenerationInfo
|
||||
@Override
|
||||
public void positionCaret(@NotNull Editor editor, boolean toEditMethodBody) {
|
||||
final T firstMember = getPsiMember();
|
||||
LOG.assertTrue(firstMember.isValid());
|
||||
LOG.assertTrue(firstMember != null);
|
||||
|
||||
if (toEditMethodBody) {
|
||||
GrMethod method = (GrMethod)firstMember;
|
||||
|
||||
@@ -46,7 +46,7 @@ object LambdaToAnonymousTransformer : PsiElementTransformer.Base() {
|
||||
LOG.assertTrue(anonymousClass != null)
|
||||
val infos = overrideOrImplement(anonymousClass!!, method)
|
||||
if (infos.size == 1) {
|
||||
val member = infos[0].psiMember
|
||||
val member = infos[0].psiMember!!
|
||||
val parameters = member.parameterList.parameters
|
||||
if (parameters.size == paramListCopy.size) {
|
||||
for (i in parameters.indices) {
|
||||
|
||||
Reference in New Issue
Block a user