psi modification utility methods moved to java-psi

This commit is contained in:
Alexey Kudravtsev
2013-05-08 11:43:51 +04:00
parent 319accf541
commit c86effed1e
27 changed files with 219 additions and 187 deletions
@@ -50,6 +50,7 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.*;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -800,7 +801,7 @@ public class HighlightClassUtil {
PsiStatement firstStatement = statements[0];
if (!(firstStatement instanceof PsiExpressionStatement)) return false;
PsiExpression expression = ((PsiExpressionStatement)firstStatement).getExpression();
if (!HighlightUtil.isSuperOrThisMethodCall(expression)) return false;
if (!RefactoringChangeUtil.isSuperOrThisMethodCall(expression)) return false;
PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)expression;
if (PsiKeyword.THIS.equals(methodCallExpression.getMethodExpression().getReferenceName())) continue;
PsiReferenceExpression referenceExpression = methodCallExpression.getMethodExpression();
@@ -887,7 +888,7 @@ public class HighlightClassUtil {
@Nullable
public static HighlightInfo checkSuperQualifierType(@NotNull Project project, @NotNull PsiMethodCallExpression superCall) {
if (!HighlightUtil.isSuperMethodCall(superCall)) return null;
if (!RefactoringChangeUtil.isSuperMethodCall(superCall)) return null;
PsiMethod ctr = PsiTreeUtil.getParentOfType(superCall, PsiMethod.class, true, PsiMember.class);
if (ctr == null) return null;
final PsiClass aClass = ctr.getContainingClass();
@@ -32,6 +32,7 @@ import com.intellij.psi.*;
import com.intellij.psi.infos.CandidateInfo;
import com.intellij.psi.infos.MethodCandidateInfo;
import com.intellij.psi.util.*;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.ui.ColorUtil;
import com.intellij.util.ui.UIUtil;
import com.intellij.xml.util.XmlStringUtil;
@@ -914,7 +915,7 @@ public class HighlightMethodUtil {
@Nullable
static HighlightInfo checkConstructorCallMustBeFirstStatement(PsiReferenceExpression expression) {
PsiElement methodCall = expression.getParent();
if (!HighlightUtil.isSuperOrThisMethodCall(methodCall)) return null;
if (!RefactoringChangeUtil.isSuperOrThisMethodCall(methodCall)) return null;
PsiElement codeBlock = methodCall.getParent().getParent();
if (codeBlock instanceof PsiCodeBlock
&& codeBlock.getParent() instanceof PsiMethod
@@ -54,6 +54,7 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.templateLanguages.OuterLanguageElement;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.*;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ArrayUtilRt;
import com.intellij.util.Function;
@@ -1859,7 +1860,7 @@ public class HighlightUtil extends HighlightUtilBase {
type = qualifier instanceof PsiExpression ? ((PsiExpression)qualifier).getType() : null;
referencedClass = PsiUtil.resolveClassInType(type);
boolean isSuperCall = isSuperMethodCall(expression.getParent());
boolean isSuperCall = RefactoringChangeUtil.isSuperMethodCall(expression.getParent());
if (resolved == null && isSuperCall) {
if (qualifier instanceof PsiReferenceExpression) {
resolved = ((PsiReferenceExpression)qualifier).resolve();
@@ -1953,7 +1954,7 @@ public class HighlightUtil extends HighlightUtilBase {
PsiElement element = expression.getParent();
while (element != null) {
// check if expression inside super()/this() call
if (isSuperOrThisMethodCall(element)) {
if (RefactoringChangeUtil.isSuperOrThisMethodCall(element)) {
PsiElement parentClass = new PsiMatcherImpl(element)
.parent(PsiMatchers.hasClass(PsiExpressionStatement.class))
.parent(PsiMatchers.hasClass(PsiCodeBlock.class))
@@ -2047,23 +2048,6 @@ public class HighlightUtil extends HighlightUtilBase {
return element != null;
}
@Nullable
private static String getMethodExpressionName(@Nullable PsiElement element) {
if (!(element instanceof PsiMethodCallExpression)) return null;
PsiReferenceExpression methodExpression = ((PsiMethodCallExpression)element).getMethodExpression();
return methodExpression.getReferenceName();
}
public static boolean isSuperOrThisMethodCall(@Nullable PsiElement element) {
String name = getMethodExpressionName(element);
return PsiKeyword.SUPER.equals(name) || PsiKeyword.THIS.equals(name);
}
public static boolean isSuperMethodCall(@Nullable PsiElement element) {
String name = getMethodExpressionName(element);
return PsiKeyword.SUPER.equals(name);
}
private static boolean thisOrSuperReference(@Nullable PsiExpression qualifierExpression, PsiClass aClass) {
if (qualifierExpression == null) return true;
PsiJavaCodeReferenceElement qualifier;
@@ -19,7 +19,7 @@ import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -55,7 +55,7 @@ class QualifyWithThisFix implements IntentionAction {
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
final PsiThisExpression thisExpression =
RefactoringUtil.createThisExpression(PsiManager.getInstance(project), myContainingClass);
RefactoringChangeUtil.createThisExpression(PsiManager.getInstance(project), myContainingClass);
((PsiReferenceExpression)myExpression).setQualifierExpression(thisExpression);
}
@@ -20,7 +20,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -89,7 +89,7 @@ public class AddTypeArgumentsFix extends MethodArgumentFix {
if (method.hasModifierProperty(PsiModifier.STATIC)) {
qualifierExpression = factory.createReferenceExpression(containingClass);
} else {
qualifierExpression = RefactoringUtil.createThisExpression(method.getManager(), null);
qualifierExpression = RefactoringChangeUtil.createThisExpression(method.getManager(), null);
}
methodExpression.setQualifierExpression(qualifierExpression);
}
@@ -36,7 +36,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.util.FieldConflictsResolver;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
@@ -120,7 +120,7 @@ public class CreateMethodFromUsageFix extends CreateFromUsageBaseFix {
PsiMethodCallExpression call = getMethodCall();
if (call == null) return Collections.emptyList();
for (PsiClass target : targets) {
if (target.isInterface() && shouldCreateStaticMember(call.getMethodExpression(), target)) continue;
if (target.isInterface() && shouldCreateStaticMember(call.getMethodExpression(), target)) continue;
if (!isMethodSignatureExists(call, target)) {
result.add(target);
}
@@ -170,7 +170,7 @@ public class CreateMethodFromUsageFix extends CreateFromUsageBaseFix {
if (enclosingContext instanceof PsiMethod && methodName.equals(enclosingContext.getName()) &&
PsiTreeUtil.isAncestor(targetClass, parentClass, true) && !ref.isQualified()) {
FieldConflictsResolver.qualifyReference(ref, method, null);
RefactoringChangeUtil.qualifyReference(ref, method, null);
}
PsiCodeBlock body = method.getBody();
@@ -33,7 +33,7 @@ import com.intellij.psi.infos.CandidateInfo;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -44,7 +44,7 @@ public class QualifyThisArgumentFix extends PsiElementBaseIntentionAction {
private final PsiThisExpression myExpression;
private final PsiClass myPsiClass;
public QualifyThisArgumentFix(@NotNull PsiThisExpression expression, @NotNull PsiClass psiClass) {
myExpression = expression;
myPsiClass = psiClass;
@@ -67,7 +67,7 @@ public class QualifyThisArgumentFix extends PsiElementBaseIntentionAction {
@Override
public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement element) throws IncorrectOperationException {
myExpression.replace(RefactoringUtil.createThisExpression(PsiManager.getInstance(project), myPsiClass));
myExpression.replace(RefactoringChangeUtil.createThisExpression(PsiManager.getInstance(project), myPsiClass));
}
public static void registerQuickFixAction(CandidateInfo[] candidates, PsiCall call, HighlightInfo highlightInfo, final TextRange fixRange) {
@@ -17,7 +17,6 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.codeInsight.generation.surroundWith.JavaWithTryCatchSurrounder;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.diagnostic.Logger;
@@ -28,6 +27,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -67,7 +67,7 @@ public class SurroundWithTryCatchFix implements IntentionAction {
return myStatement != null &&
myStatement.isValid() &&
(!(myStatement instanceof PsiExpressionStatement) ||
!HighlightUtil.isSuperOrThisMethodCall(((PsiExpressionStatement)myStatement).getExpression()));
!RefactoringChangeUtil.isSuperOrThisMethodCall(((PsiExpressionStatement)myStatement).getExpression()));
}
@Override
@@ -16,7 +16,6 @@
package com.intellij.codeInsight.intention.impl;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils;
import com.intellij.codeInsight.highlighting.HighlightManager;
import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
@@ -30,6 +29,7 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -152,7 +152,7 @@ public abstract class BaseMoveInitializerToMethodAction extends PsiElementBaseIn
private static boolean isSuperOrThisMethodCall(@NotNull PsiStatement statement) {
if (statement instanceof PsiExpressionStatement) {
final PsiElement expression = ((PsiExpressionStatement)statement).getExpression();
if (HighlightUtil.isSuperOrThisMethodCall(expression)) {
if (RefactoringChangeUtil.isSuperOrThisMethodCall(expression)) {
return true;
}
}
@@ -538,8 +538,9 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr
containingClass = PsiTreeUtil.getParentOfType(containingClass, PsiClass.class);
}
if (containingClasses.size() == 1) {
return RefactoringUtil.createThisExpression(parentClass.getManager(), containingClasses.contains(parentClass) ? null
: containingClasses.iterator().next());
return RefactoringChangeUtil.createThisExpression(parentClass.getManager(), containingClasses.contains(parentClass) ? null
: containingClasses
.iterator().next());
}
}
}
@@ -761,8 +762,8 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr
baseMethod == null ? PsiSubstitutor.EMPTY : ChangeSignatureProcessor.calculateSubstitutor(caller, baseMethod);
final PsiClass aClass = changeInfo.getMethod().getContainingClass();
final PsiClass callerContainingClass = caller.getContainingClass();
final PsiSubstitutor psiSubstitutor = aClass != null && callerContainingClass != null && callerContainingClass.isInheritor(aClass, true)
? TypeConversionUtil.getSuperClassSubstitutor(aClass, callerContainingClass, substitutor)
final PsiSubstitutor psiSubstitutor = aClass != null && callerContainingClass != null && callerContainingClass.isInheritor(aClass, true)
? TypeConversionUtil.getSuperClassSubstitutor(aClass, callerContainingClass, substitutor)
: PsiSubstitutor.EMPTY;
for (JavaParameterInfo info : primaryNewParms) {
if (info.getOldIndex() < 0) newParameters.add(createNewParameter(changeInfo, info, psiSubstitutor, substitutor));
@@ -203,7 +203,7 @@ public class ExtractMethodProcessor implements MatchProvider {
public boolean prepare() throws PrepareFailedException {
return prepare(null);
}
/**
* Invoked in atomic action
*/
@@ -551,7 +551,7 @@ public class ExtractMethodProcessor implements MatchProvider {
myVariableDatum[i] = myInputVariables.getInputVariables().get(i);
}
}
@TestOnly
public void doNotPassParameter(int i) {
myVariableDatum[i].passAsParameter = false;
@@ -824,10 +824,10 @@ public class ExtractMethodProcessor implements MatchProvider {
myExtractedMethod = (PsiMethod)myTargetClass.addAfter(newMethod, myAnchor);
if (isNeedToChangeCallContext() && myNeedChangeContext) {
ChangeContextUtil.decodeContextInfo(myExtractedMethod, myTargetClass, RefactoringUtil.createThisExpression(myManager, null));
ChangeContextUtil.decodeContextInfo(myExtractedMethod, myTargetClass, RefactoringChangeUtil.createThisExpression(myManager, null));
if (myMethodCall.resolveMethod() != myExtractedMethod) {
final PsiReferenceExpression methodExpression = myMethodCall.getMethodExpression();
methodExpression.setQualifierExpression(RefactoringUtil.createThisExpression(myManager, myTargetClass));
methodExpression.setQualifierExpression(RefactoringChangeUtil.createThisExpression(myManager, myTargetClass));
}
}
@@ -1000,7 +1000,7 @@ public class ExtractMethodProcessor implements MatchProvider {
private PsiMethod generateEmptyMethod(PsiClassType[] exceptions, boolean isStatic) throws IncorrectOperationException {
PsiMethod newMethod;
if (myIsChainedConstructor) {
newMethod = myElementFactory.createConstructor();
newMethod = myElementFactory.createConstructor();
}
else {
newMethod = myElementFactory.createMethod(myMethodName, myReturnType);
@@ -16,7 +16,6 @@
package com.intellij.refactoring.inline;
import com.intellij.codeInsight.ChangeContextUtil;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.history.LocalHistory;
import com.intellij.history.LocalHistoryAction;
import com.intellij.lang.Language;
@@ -621,7 +620,7 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor {
}
}
PsiClass thisClass = myMethod.getContainingClass();
PsiExpression thisAccessExpr;
if (thisVar != null) {
@@ -968,8 +967,8 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor {
for (PsiReference ref : refs) {
final PsiJavaCodeReferenceElement javaRef = (PsiJavaCodeReferenceElement)ref;
if (initializer instanceof PsiThisExpression && ((PsiThisExpression)initializer).getQualifier() == null) {
final PsiClass varThisClass = RefactoringUtil.getThisClass(variable);
if (RefactoringUtil.getThisClass(javaRef) != varThisClass) {
final PsiClass varThisClass = RefactoringChangeUtil.getThisClass(variable);
if (RefactoringChangeUtil.getThisClass(javaRef) != varThisClass) {
initializer = JavaPsiFacade.getInstance(myManager.getProject()).getElementFactory().createExpressionFromText(varThisClass.getName() + ".this", variable);
}
}
@@ -1438,7 +1437,7 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor {
if (methodBody.getStatements().length > 1) {
PsiExpression expr = PsiTreeUtil.getParentOfType(element, PsiExpression.class);
while (expr != null) {
if (HighlightUtil.isSuperOrThisMethodCall(expr)) {
if (RefactoringChangeUtil.isSuperOrThisMethodCall(expr)) {
return "Inline cannot be applied to multiline method in constructor call";
}
expr = PsiTreeUtil.getParentOfType(expr, PsiExpression.class, true);
@@ -62,6 +62,7 @@ import com.intellij.refactoring.introduceVariable.IntroduceVariableBase;
import com.intellij.refactoring.rename.RenameJavaVariableProcessor;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.EnumConstantsUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.occurrences.OccurrenceManager;
import com.intellij.util.IncorrectOperationException;
@@ -373,7 +374,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
PsiStatement assignment = createAssignment(field, initializerExpression, body.getLastChild(), parentClass);
assignment = (PsiStatement) body.add(assignment);
ChangeContextUtil.decodeContextInfo(assignment, field.getContainingClass(),
RefactoringUtil.createThisExpression(field.getManager(), null));
RefactoringChangeUtil.createThisExpression(field.getManager(), null));
added = true;
}
if (!added && enclosingConstructor == null) {
@@ -383,7 +384,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
PsiStatement assignment = createAssignment(field, initializerExpression, body.getLastChild(), parentClass);
assignment = (PsiStatement) body.add(assignment);
ChangeContextUtil.decodeContextInfo(assignment, field.getContainingClass(),
RefactoringUtil.createThisExpression(field.getManager(), null));
RefactoringChangeUtil.createThisExpression(field.getManager(), null));
}
}
catch (IncorrectOperationException e) {
@@ -444,7 +445,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
return null;
}
}
protected abstract boolean accept(ElementToWorkOn elementToWorkOn);
protected ElementToWorkOn.ElementsProcessor<ElementToWorkOn> getElementProcessor(final Project project, final Editor editor) {
@@ -707,7 +708,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
}
initializer = IntroduceVariableBase.replaceExplicitWithDiamondWhenApplicable(initializer, myType);
final PsiMethod enclosingConstructor = getEnclosingConstructor(myParentClass, myAnchorElement);
PsiClass destClass = mySettings.getDestinationClass() == null ? myParentClass : mySettings.getDestinationClass();
@@ -861,7 +862,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
}
return true;
}
static PsiField appendField(final PsiExpression initializer,
InitializationPlace initializerPlace, final PsiClass destClass,
final PsiClass parentClass,
@@ -877,13 +878,13 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
final PsiField forwardReference) {
final PsiClass parentClass = PsiTreeUtil.getParentOfType(anchorMember, PsiClass.class);
if (anchorMember instanceof PsiField &&
if (anchorMember instanceof PsiField &&
anchorMember.getParent() == parentClass &&
destClass == parentClass &&
((PsiField)anchorMember).hasModifierProperty(PsiModifier.STATIC) == psiField.hasModifierProperty(PsiModifier.STATIC)) {
return (PsiField)destClass.addBefore(psiField, anchorMember);
}
else if (anchorMember instanceof PsiClassInitializer &&
else if (anchorMember instanceof PsiClassInitializer &&
anchorMember.getParent() == parentClass &&
destClass == parentClass) {
PsiField field = (PsiField)destClass.addBefore(psiField, anchorMember);
@@ -15,7 +15,6 @@
*/
package com.intellij.refactoring.makeStatic;
import com.intellij.codeInsight.intention.impl.BaseMoveInitializerToMethodAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
@@ -29,6 +28,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.move.MoveInstanceMembersUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.refactoring.util.RefactoringUIUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.javadoc.MethodJavaDocHelper;
@@ -262,7 +262,7 @@ public class MakeClassStaticProcessor extends MakeMethodOrClassStaticProcessor<P
PsiElement newQualifier;
if (instanceRef == null || instanceRef instanceof PsiSuperExpression) {
final PsiClass thisClass = RefactoringUtil.getThisClass(element);
final PsiClass thisClass = RefactoringChangeUtil.getThisClass(element);
@NonNls String thisText;
if (thisClass.getManager().areElementsEquivalent(thisClass, myMember.getContainingClass())) {
thisText = "this";
@@ -48,10 +48,7 @@ import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.listeners.JavaRefactoringListenerManager;
import com.intellij.refactoring.listeners.impl.JavaRefactoringListenerManagerImpl;
import com.intellij.refactoring.util.DocCommentPolicy;
import com.intellij.refactoring.util.RefactoringHierarchyUtil;
import com.intellij.refactoring.util.RefactoringUIUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.*;
import com.intellij.refactoring.util.classMembers.ClassMemberReferencesVisitor;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.refactoring.util.duplicates.MethodDuplicatesHandler;
@@ -485,7 +482,7 @@ public class PullUpHelper extends BaseRefactoringProcessor{
PsiStatement assignmentStatement = (PsiStatement)constructor.getBody().add(initializer.initializer);
ChangeContextUtil.decodeContextInfo(assignmentStatement,
myTargetSuperClass, RefactoringUtil.createThisExpression(myManager, null));
myTargetSuperClass, RefactoringChangeUtil.createThisExpression(myManager, null));
for (PsiElement psiElement : initializer.statementsToRemove) {
psiElement.delete();
}
@@ -36,10 +36,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.move.MoveCallback;
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesUtil;
import com.intellij.refactoring.rename.RenameUtil;
import com.intellij.refactoring.util.ConflictsUtil;
import com.intellij.refactoring.util.NonCodeUsageInfo;
import com.intellij.refactoring.util.RefactoringUIUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.*;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
import com.intellij.usageView.UsageViewUtil;
@@ -231,12 +228,12 @@ public class MoveInnerProcessor extends BaseRefactoringProcessor {
if (argList != null) { // can happen in incomplete code
if (newExpr.getQualifier() == null) {
PsiThisExpression thisExpr;
PsiClass parentClass = RefactoringUtil.getThisClass(newExpr);
PsiClass parentClass = RefactoringChangeUtil.getThisClass(newExpr);
if (myOuterClass.equals(parentClass)) {
thisExpr = RefactoringUtil.createThisExpression(manager, null);
thisExpr = RefactoringChangeUtil.createThisExpression(manager, null);
}
else {
thisExpr = RefactoringUtil.createThisExpression(manager, myOuterClass);
thisExpr = RefactoringChangeUtil.createThisExpression(manager, myOuterClass);
}
argList.addAfter(thisExpr, null);
}
@@ -425,7 +425,14 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
return;
}
if (myTargetVariable.equals(resolved)) {
PsiThisExpression thisExpression = RefactoringUtil.createThisExpression(manager, PsiTreeUtil.isAncestor(myMethod, PsiTreeUtil.getParentOfType(expression, PsiClass.class), true) ? myTargetClass : null);
PsiThisExpression thisExpression = RefactoringChangeUtil.createThisExpression(manager, PsiTreeUtil.isAncestor(myMethod,
PsiTreeUtil
.getParentOfType(
expression,
PsiClass.class),
true)
? myTargetClass
: null);
replaceMap.put(expression, thisExpression);
return;
}
@@ -15,16 +15,11 @@
*/
package com.intellij.refactoring.util;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
@@ -84,7 +79,7 @@ public class FieldConflictsResolver {
final PsiElement result = expression.resolve();
if (expression.getManager().areElementsEquivalent(result, myField)) {
try {
replacedRef[0] = qualifyReference(expression, myField, myQualifyingClass);
replacedRef[0] = RefactoringChangeUtil.qualifyReference(expression, myField, myQualifyingClass);
}
catch (IncorrectOperationException e) {
LOG.error(e);
@@ -104,46 +99,8 @@ public class FieldConflictsResolver {
if (!referenceExpression.isValid()) continue;
final PsiElement newlyResolved = referenceExpression.resolve();
if (!manager.areElementsEquivalent(newlyResolved, myField)) {
qualifyReference(referenceExpression, myField, myQualifyingClass);
RefactoringChangeUtil.qualifyReference(referenceExpression, myField, myQualifyingClass);
}
}
}
public static PsiReferenceExpression qualifyReference(PsiReferenceExpression referenceExpression,
final PsiMember member,
@Nullable final PsiClass qualifyingClass) throws IncorrectOperationException {
PsiManager manager = referenceExpression.getManager();
PsiMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(referenceExpression, PsiMethodCallExpression.class, true);
while (methodCallExpression != null) {
if (HighlightUtil.isSuperOrThisMethodCall(methodCallExpression)) {
return referenceExpression;
}
methodCallExpression = PsiTreeUtil.getParentOfType(methodCallExpression, PsiMethodCallExpression.class, true);
}
PsiReferenceExpression expressionFromText;
final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
if (qualifyingClass == null) {
PsiClass parentClass = PsiTreeUtil.getParentOfType(referenceExpression, PsiClass.class);
final PsiClass containingClass = member.getContainingClass();
if (parentClass != null && !InheritanceUtil.isInheritorOrSelf(parentClass, containingClass, true)) {
while (parentClass != null && !InheritanceUtil.isInheritorOrSelf(parentClass, containingClass, true)) {
parentClass = PsiTreeUtil.getParentOfType(parentClass, PsiClass.class, true);
}
LOG.assertTrue(parentClass != null);
expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("A.this." + member.getName(), null);
((PsiThisExpression)expressionFromText.getQualifierExpression()).getQualifier().replace(factory.createClassReferenceElement(parentClass));
}
else {
expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("this." + member.getName(), null);
}
}
else {
expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("A." + member.getName(), null);
expressionFromText.setQualifierExpression(factory.createReferenceExpression(qualifyingClass));
}
CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(manager.getProject());
expressionFromText = (PsiReferenceExpression)codeStyleManager.reformat(expressionFromText);
return (PsiReferenceExpression)referenceExpression.replace(expressionFromText);
}
}
@@ -47,8 +47,8 @@ public class InlineUtil {
throws IncorrectOperationException {
PsiManager manager = initializer.getManager();
PsiClass thisClass = RefactoringUtil.getThisClass(initializer);
PsiClass refParent = RefactoringUtil.getThisClass(ref);
PsiClass thisClass = RefactoringChangeUtil.getThisClass(initializer);
PsiClass refParent = RefactoringChangeUtil.getThisClass(ref);
boolean insertCastWhenUnchecked = ref.getParent() instanceof PsiForeachStatement;
final PsiType varType = variable.getType();
initializer = RefactoringUtil.convertInitializerToNormalExpression(initializer, varType);
@@ -57,7 +57,7 @@ public class InlineUtil {
PsiExpression expr = (PsiExpression)replaceDiamondWithInferredTypesIfNeeded(initializer, ref);
PsiType exprType = expr.getType();
if (exprType != null && (!varType.equals(exprType) && (varType instanceof PsiPrimitiveType || exprType instanceof PsiPrimitiveType)
|| !TypeConversionUtil.isAssignable(varType, exprType)
|| !TypeConversionUtil.isAssignable(varType, exprType)
|| insertCastWhenUnchecked && GenericsHighlightUtil.isRawToGeneric(varType, exprType))) {
boolean matchedTypes = false;
//try explicit type arguments
@@ -174,14 +174,14 @@ public class InlineUtil {
if (Comparing.equal(thisClass, refParent))
{
thisAccessExpr = RefactoringUtil.createThisExpression(manager, null);
thisAccessExpr = RefactoringChangeUtil.createThisExpression(manager, null);
}
else
{
if (!(thisClass instanceof PsiAnonymousClass)) {
thisAccessExpr = RefactoringUtil.createThisExpression(manager, thisClass);
thisAccessExpr = RefactoringChangeUtil.createThisExpression(manager, thisClass);
}
}
return thisAccessExpr;
@@ -373,22 +373,6 @@ public class RefactoringUtil {
return null;
}
public static PsiClass getThisClass(PsiElement place) {
PsiElement parent = place.getContext();
if (parent == null) return null;
PsiElement prev = null;
while (true) {
if (parent instanceof PsiClass) {
if (!(parent instanceof PsiAnonymousClass && ((PsiAnonymousClass)parent).getArgumentList() == prev)) {
return (PsiClass)parent;
}
}
prev = parent;
parent = parent.getContext();
if (parent == null) return null;
}
}
public static PsiClass getThisResolveClass(final PsiReferenceExpression place) {
final JavaResolveResult resolveResult = place.advancedResolve(false);
final PsiElement scope = resolveResult.getCurrentFileResolveScope();
@@ -434,29 +418,6 @@ public class RefactoringUtil {
return !isReassigned;
}
public static PsiThisExpression createThisExpression(PsiManager manager, PsiClass qualifierClass) throws IncorrectOperationException {
return RefactoringUtil.<PsiThisExpression>createQualifiedExpression(manager, qualifierClass, "this");
}
public static PsiSuperExpression createSuperExpression(PsiManager manager, PsiClass qualifierClass) throws IncorrectOperationException {
return RefactoringUtil.<PsiSuperExpression>createQualifiedExpression(manager, qualifierClass, "super");
}
private static <T extends PsiQualifiedExpression> T createQualifiedExpression(PsiManager manager, PsiClass qualifierClass, String qName) throws IncorrectOperationException {
PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
if (qualifierClass != null) {
T qualifiedThis = (T)factory.createExpressionFromText("q." + qName, null);
qualifiedThis = (T)CodeStyleManager.getInstance(manager.getProject()).reformat(qualifiedThis);
PsiJavaCodeReferenceElement thisQualifier = qualifiedThis.getQualifier();
LOG.assertTrue(thisQualifier != null);
thisQualifier.bindToElement(qualifierClass);
return qualifiedThis;
}
else {
return (T)factory.createExpressionFromText(qName, null);
}
}
/**
* removes a reference to the specified class from the reference list given
*
@@ -27,7 +27,7 @@ import com.intellij.psi.impl.source.PsiImmediateClassType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.*;
import com.intellij.refactoring.extractMethod.InputVariables;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.IntArrayList;
@@ -349,11 +349,11 @@ public class DuplicatesFinder {
return false;
}
PsiElement qualifier1 = ((PsiJavaCodeReferenceElement)pattern).getQualifier();
if (qualifier1 instanceof PsiReferenceExpression && qualifier2 instanceof PsiReferenceExpression &&
if (qualifier1 instanceof PsiReferenceExpression && qualifier2 instanceof PsiReferenceExpression &&
!match.areCorrespond(((PsiReferenceExpression)qualifier1).resolve(), ((PsiReferenceExpression)qualifier2).resolve())) {
return false;
}
}
if (pattern instanceof PsiTypeCastExpression) {
@@ -424,16 +424,17 @@ public class DuplicatesFinder {
final Pair<PsiVariable, PsiType> parameter = patternQualifier.getUserData(PARAMETER);
if (parameter != null) {
final PsiClass thisClass = RefactoringUtil.getThisClass(parameter.first);
final PsiClass thisClass = RefactoringChangeUtil.getThisClass(parameter.first);
if (contextClass != null && InheritanceUtil.isInheritorOrSelf(thisClass, contextClass, true)) {
contextClass = thisClass;
}
final PsiClass thisCandidate = RefactoringUtil.getThisClass(candidate);
final PsiClass thisCandidate = RefactoringChangeUtil.getThisClass(candidate);
if (thisCandidate != null && InheritanceUtil.isInheritorOrSelf(thisCandidate, contextClass, true)) {
contextClass = thisCandidate;
}
return contextClass != null && match.putParameter(parameter, RefactoringUtil.createThisExpression(patternQualifier.getManager(), contextClass));
return contextClass != null && match.putParameter(parameter, RefactoringChangeUtil
.createThisExpression(patternQualifier.getManager(), contextClass));
} else if (patternQualifier instanceof PsiReferenceExpression) {
final PsiElement resolved = ((PsiReferenceExpression)patternQualifier).resolve();
if (resolved instanceof PsiClass) {
@@ -23,6 +23,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.VisibilityUtil;
@@ -83,9 +84,9 @@ class MethodDuplicatesMatchProvider implements MatchProvider {
} else {
final PsiClass psiClass = PsiTreeUtil.getParentOfType(match.getMatchStart(), PsiClass.class);
if (psiClass != null && psiClass.isInheritor(containingClass, true)) {
qualifierExpression.replace(RefactoringUtil.createSuperExpression(containingClass.getManager(), null));
qualifierExpression.replace(RefactoringChangeUtil.createSuperExpression(containingClass.getManager(), null));
} else {
qualifierExpression.replace(RefactoringUtil.createThisExpression(containingClass.getManager(), containingClass));
qualifierExpression.replace(RefactoringChangeUtil.createThisExpression(containingClass.getManager(), containingClass));
}
}
}
@@ -20,8 +20,7 @@ import com.intellij.openapi.util.Key;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.util.FieldConflictsResolver;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -57,7 +56,7 @@ public class ChangeContextUtil {
PsiThisExpression thisExpr = (PsiThisExpression)scope;
final PsiJavaCodeReferenceElement qualifier = thisExpr.getQualifier();
if (qualifier == null){
PsiClass thisClass = RefactoringUtil.getThisClass(thisExpr);
PsiClass thisClass = RefactoringChangeUtil.getThisClass(thisExpr);
if (thisClass != null && !(thisClass instanceof PsiAnonymousClass)){
thisExpr.putCopyableUserData(THIS_QUALIFIER_CLASS_KEY, thisClass);
}
@@ -187,7 +186,7 @@ public class ChangeContextUtil {
return thisExpr;
}
private static PsiReferenceExpression decodeReferenceExpression(PsiReferenceExpression refExpr,
private static PsiReferenceExpression decodeReferenceExpression(@NotNull PsiReferenceExpression refExpr,
PsiExpression thisAccessExpr,
PsiClass thisClass) throws IncorrectOperationException {
PsiManager manager = refExpr.getManager();
@@ -225,7 +224,7 @@ public class ChangeContextUtil {
PsiJavaCodeReferenceElement thisQualifier = ((PsiThisExpression)thisAccessExpr).getQualifier();
PsiClass thisExprClass = thisQualifier != null
? (PsiClass)thisQualifier.resolve()
: RefactoringUtil.getThisClass(refExpr);
: RefactoringChangeUtil.getThisClass(refExpr);
if (currentClass.equals(thisExprClass) || thisExprClass.isInheritor(realParentClass, true)){ // qualifier is not necessary
needQualifier = false;
}
@@ -240,7 +239,7 @@ public class ChangeContextUtil {
else if (thisClass != null && realParentClass != null && PsiTreeUtil.isAncestor(realParentClass, thisClass, true)) {
PsiElement refElement = refExpr.resolve();
if (refElement != null && !manager.areElementsEquivalent(refMember, refElement)) {
refExpr = FieldConflictsResolver.qualifyReference(refExpr, refMember, null);
refExpr = RefactoringChangeUtil.qualifyReference(refExpr, refMember, null);
}
}
}
@@ -302,7 +301,7 @@ public class ChangeContextUtil {
return refElement.equals(newRefElement);
}
else if (refExpr instanceof PsiMethodReferenceExpression) {
return false;
return false;
}
else {
PsiReferenceExpression newRefExpr = (PsiReferenceExpression)factory.createExpressionFromText(
@@ -322,7 +321,7 @@ public class ChangeContextUtil {
PsiThisExpression thisExpr = (PsiThisExpression)scope;
if (thisExpr.getQualifier() == null){
if (thisClass instanceof PsiAnonymousClass) return null;
PsiThisExpression qualifiedThis = RefactoringUtil.createThisExpression(thisClass.getManager(), thisClass);
PsiThisExpression qualifiedThis = RefactoringChangeUtil.createThisExpression(thisClass.getManager(), thisClass);
if (thisExpr.getParent() != null) {
return thisExpr.replace(qualifiedThis);
} else {
@@ -0,0 +1,124 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.refactoring.util;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class RefactoringChangeUtil {
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.util.ChangeUtil");
@Nullable
private static String getMethodExpressionName(@Nullable PsiElement element) {
if (!(element instanceof PsiMethodCallExpression)) return null;
PsiReferenceExpression methodExpression = ((PsiMethodCallExpression)element).getMethodExpression();
return methodExpression.getReferenceName();
}
public static boolean isSuperOrThisMethodCall(@Nullable PsiElement element) {
String name = getMethodExpressionName(element);
return PsiKeyword.SUPER.equals(name) || PsiKeyword.THIS.equals(name);
}
public static boolean isSuperMethodCall(@Nullable PsiElement element) {
String name = getMethodExpressionName(element);
return PsiKeyword.SUPER.equals(name);
}
public static PsiReferenceExpression qualifyReference(@NotNull PsiReferenceExpression referenceExpression,
@NotNull PsiMember member,
@Nullable final PsiClass qualifyingClass) throws IncorrectOperationException {
PsiManager manager = referenceExpression.getManager();
PsiMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(referenceExpression, PsiMethodCallExpression.class, true);
while (methodCallExpression != null) {
if (isSuperOrThisMethodCall(methodCallExpression)) {
return referenceExpression;
}
methodCallExpression = PsiTreeUtil.getParentOfType(methodCallExpression, PsiMethodCallExpression.class, true);
}
PsiReferenceExpression expressionFromText;
final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
if (qualifyingClass == null) {
PsiClass parentClass = PsiTreeUtil.getParentOfType(referenceExpression, PsiClass.class);
final PsiClass containingClass = member.getContainingClass();
if (parentClass != null && !InheritanceUtil.isInheritorOrSelf(parentClass, containingClass, true)) {
while (parentClass != null && !InheritanceUtil.isInheritorOrSelf(parentClass, containingClass, true)) {
parentClass = PsiTreeUtil.getParentOfType(parentClass, PsiClass.class, true);
}
LOG.assertTrue(parentClass != null);
expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("A.this." + member.getName(), null);
((PsiThisExpression)expressionFromText.getQualifierExpression()).getQualifier().replace(factory.createClassReferenceElement(parentClass));
}
else {
expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("this." + member.getName(), null);
}
}
else {
expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("A." + member.getName(), null);
expressionFromText.setQualifierExpression(factory.createReferenceExpression(qualifyingClass));
}
CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(manager.getProject());
expressionFromText = (PsiReferenceExpression)codeStyleManager.reformat(expressionFromText);
return (PsiReferenceExpression)referenceExpression.replace(expressionFromText);
}
public static PsiClass getThisClass(@NotNull PsiElement place) {
PsiElement parent = place.getContext();
if (parent == null) return null;
PsiElement prev = null;
while (true) {
if (parent instanceof PsiClass) {
if (!(parent instanceof PsiAnonymousClass && ((PsiAnonymousClass)parent).getArgumentList() == prev)) {
return (PsiClass)parent;
}
}
prev = parent;
parent = parent.getContext();
if (parent == null) return null;
}
}
static <T extends PsiQualifiedExpression> T createQualifiedExpression(@NotNull PsiManager manager,
PsiClass qualifierClass,
@NotNull String qName) throws IncorrectOperationException {
PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
if (qualifierClass != null) {
T qualifiedThis = (T)factory.createExpressionFromText("q." + qName, null);
qualifiedThis = (T)CodeStyleManager.getInstance(manager.getProject()).reformat(qualifiedThis);
PsiJavaCodeReferenceElement thisQualifier = qualifiedThis.getQualifier();
LOG.assertTrue(thisQualifier != null);
thisQualifier.bindToElement(qualifierClass);
return qualifiedThis;
}
else {
return (T)factory.createExpressionFromText(qName, null);
}
}
public static PsiThisExpression createThisExpression(PsiManager manager, PsiClass qualifierClass) throws IncorrectOperationException {
return RefactoringChangeUtil.<PsiThisExpression>createQualifiedExpression(manager, qualifierClass, "this");
}
public static PsiSuperExpression createSuperExpression(PsiManager manager, PsiClass qualifierClass) throws IncorrectOperationException {
return RefactoringChangeUtil.<PsiSuperExpression>createQualifiedExpression(manager, qualifierClass, "super");
}
}
@@ -16,13 +16,13 @@
package com.siyeh.ig.internationalization;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.codeInsight.intention.AddAnnotationFix;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -209,7 +209,7 @@ public class StringConcatenationInspection extends BaseInspection {
} else {
final PsiMethodCallExpression methodCallExpression =
PsiTreeUtil.getParentOfType(expression, PsiMethodCallExpression.class, true, PsiCodeBlock.class, PsiClass.class);
if (HighlightUtil.isSuperOrThisMethodCall(methodCallExpression)) {
if (RefactoringChangeUtil.isSuperOrThisMethodCall(methodCallExpression)) {
return;
}
}
@@ -24,7 +24,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.HashMap;
import com.siyeh.ipp.base.Intention;
@@ -68,7 +68,8 @@ public class ReplaceLambdaWithAnonymousIntention extends Intention {
final PsiClass thisClass = PsiTreeUtil.getParentOfType(lambdaExpression, PsiClass.class, true);
final String thisClassName = thisClass.getName();
if (thisClassName != null) {
final PsiThisExpression thisAccessExpr = thisClass instanceof PsiAnonymousClass ? null : RefactoringUtil.createThisExpression(lambdaExpression.getManager(), thisClass);
final PsiThisExpression thisAccessExpr = thisClass instanceof PsiAnonymousClass ? null : RefactoringChangeUtil
.createThisExpression(lambdaExpression.getManager(), thisClass);
ChangeContextUtil.decodeContextInfo(blockFromText, thisClass, thisAccessExpr);
final Map<PsiElement, PsiElement> replacements = new HashMap<PsiElement, PsiElement>();
blockFromText.accept(new JavaRecursiveElementWalkingVisitor() {
@@ -79,7 +80,7 @@ public class ReplaceLambdaWithAnonymousIntention extends Intention {
replacements.put(expression, psiElementFactory.createExpressionFromText(thisClassName + "." + expression.getText(), expression));
}
}
});
for (PsiElement psiElement : replacements.keySet()) {
psiElement.replace(replacements.get(psiElement));
@@ -148,9 +149,9 @@ public class ReplaceLambdaWithAnonymousIntention extends Intention {
if (disabled[0]) return false;
}
final PsiType functionalInterfaceType = lambdaExpression.getFunctionalInterfaceType();
return functionalInterfaceType != null &&
LambdaUtil.getFunctionalInterfaceMethod(functionalInterfaceType) != null &&
LambdaUtil.isLambdaFullyInferred(lambdaExpression, functionalInterfaceType) &&
return functionalInterfaceType != null &&
LambdaUtil.getFunctionalInterfaceMethod(functionalInterfaceType) != null &&
LambdaUtil.isLambdaFullyInferred(lambdaExpression, functionalInterfaceType) &&
LambdaHighlightingUtil.checkInterfaceFunctional(functionalInterfaceType) == null;
}
return false;
@@ -23,7 +23,6 @@ import com.intellij.ExtensionPoints;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.CodeInsightBundle;
import com.intellij.codeInsight.daemon.GroupNames;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.codeInsight.intention.AddAnnotationFix;
import com.intellij.codeInspection.*;
import com.intellij.codeInspection.ex.BaseLocalInspectionTool;
@@ -47,6 +46,7 @@ import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.introduceField.IntroduceConstantHandler;
import com.intellij.refactoring.util.RefactoringChangeUtil;
import com.intellij.ui.AddDeleteListPanel;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.FieldPanel;
@@ -891,7 +891,7 @@ public class I18nInspection extends BaseLocalInspectionTool {
}
final PsiElement grandparent = parent.getParent();
final PsiClass aClass;
if (HighlightUtil.isSuperOrThisMethodCall(grandparent)) {
if (RefactoringChangeUtil.isSuperOrThisMethodCall(grandparent)) {
final PsiMethod method = ((PsiMethodCallExpression)grandparent).resolveMethod();
if (method != null) {
aClass = method.getContainingClass();