mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
psi modification utility methods moved to java-psi
This commit is contained in:
+3
-2
@@ -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();
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+3
-19
@@ -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;
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
+3
-3
@@ -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();
|
||||
|
||||
+3
-3
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-4
@@ -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));
|
||||
|
||||
+5
-5
@@ -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);
|
||||
|
||||
+8
-7
@@ -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);
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
+8
-1
@@ -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) {
|
||||
|
||||
+3
-2
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-8
@@ -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");
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-6
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user