mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
type casts may have side effects if their operands do
This commit is contained in:
+1
-1
@@ -79,7 +79,7 @@ public class DefaultCodeFragmentFactory extends CodeFragmentFactory {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (parameters.getInvocationCount() <= 1 && JavaCompletionUtil.containsMethodCalls(expression)) {
|
||||
if (parameters.getInvocationCount() <= 1 && JavaCompletionUtil.mayHaveSideEffects(expression)) {
|
||||
final CompletionService service = CompletionService.getCompletionService();
|
||||
if (service.getAdvertisementText() == null && parameters.getInvocationCount() < 2) {
|
||||
service.setAdvertisementText("Invoke completion once more to see runtime type variants");
|
||||
|
||||
@@ -677,18 +677,19 @@ public class JavaCompletionUtil {
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
static PsiElement getQualifier(final PsiElement element) {
|
||||
return element instanceof PsiJavaCodeReferenceElement ? ((PsiJavaCodeReferenceElement)element).getQualifier() : null;
|
||||
}
|
||||
|
||||
public static boolean containsMethodCalls(@Nullable final PsiElement qualifier) {
|
||||
if (qualifier == null) return false;
|
||||
if (qualifier instanceof PsiMethodCallExpression || qualifier instanceof PsiNewExpression) return true;
|
||||
if (qualifier instanceof PsiArrayAccessExpression) {
|
||||
return containsMethodCalls(((PsiArrayAccessExpression)qualifier).getArrayExpression());
|
||||
public static boolean mayHaveSideEffects(@Nullable final PsiElement element) {
|
||||
if (element == null) return false;
|
||||
if (element instanceof PsiMethodCallExpression || element instanceof PsiNewExpression) return true;
|
||||
if (element instanceof PsiTypeCastExpression) {
|
||||
return mayHaveSideEffects(((PsiTypeCastExpression)element).getOperand());
|
||||
}
|
||||
return containsMethodCalls(getQualifier(qualifier));
|
||||
if (element instanceof PsiArrayAccessExpression) {
|
||||
return mayHaveSideEffects(((PsiArrayAccessExpression)element).getArrayExpression());
|
||||
}
|
||||
if (element instanceof PsiJavaCodeReferenceElement) {
|
||||
return mayHaveSideEffects(((PsiJavaCodeReferenceElement)element).getQualifier());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void insertClassReference(@NotNull PsiClass psiClass, @NotNull PsiFile file, int offset) {
|
||||
|
||||
+4
-2
@@ -274,7 +274,9 @@ public class ReferenceExpressionCompletionContributor {
|
||||
}
|
||||
if (itemType == null) return;
|
||||
|
||||
final PsiElement qualifier = JavaCompletionUtil.getQualifier(reference.getElement());
|
||||
final PsiElement element1 = reference.getElement();
|
||||
final PsiElement qualifier =
|
||||
element1 instanceof PsiJavaCodeReferenceElement ? ((PsiJavaCodeReferenceElement)element1).getQualifier() : null;
|
||||
final PsiType expectedType = parameters.getExpectedType();
|
||||
if (!OBJECT_METHOD_PATTERN.accepts(object) || allowGetClass(object, parameters)) {
|
||||
if (parameters.getParameters().getInvocationCount() >= 3 || !itemType.equalsToText(CommonClassNames.JAVA_LANG_STRING)) {
|
||||
@@ -398,7 +400,7 @@ public class ReferenceExpressionCompletionContributor {
|
||||
}
|
||||
|
||||
final String bracketSpace = getSpace(CodeStyleSettingsManager.getSettings(element.getProject()).SPACE_WITHIN_BRACKETS);
|
||||
if (object instanceof PsiVariable && !JavaCompletionUtil.containsMethodCalls(qualifier)) {
|
||||
if (object instanceof PsiVariable && !JavaCompletionUtil.mayHaveSideEffects(qualifier)) {
|
||||
final PsiVariable variable = (PsiVariable)object;
|
||||
addToArrayConversion(element, prefix,
|
||||
"new " + componentType.getCanonicalText() +
|
||||
|
||||
Reference in New Issue
Block a user