summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/codeInsight
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInsight')
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java28
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsLineMarkerProvider.java11
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/TailTypes.java6
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java2
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java11
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java6
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java6
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java2
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java81
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java4
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithTryFinallySurrounder.java16
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/highlighting/HighlightExceptionsHandlerFactory.java5
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/intention/impl/AddAnnotationIntention.java11
13 files changed, 151 insertions, 38 deletions
diff --git a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java
index 08a071231410..0bf1c1cd7218 100644
--- a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java
+++ b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java
@@ -31,7 +31,10 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiShortNamesCache;
import com.intellij.psi.search.searches.DeepestSuperMethodsSearch;
import com.intellij.psi.tree.IElementType;
-import com.intellij.psi.util.*;
+import com.intellij.psi.util.PropertyUtil;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.psi.util.PsiUtil;
+import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.NullableFunction;
import com.intellij.util.Processor;
@@ -126,10 +129,6 @@ public class ExpectedTypesProvider {
final boolean voidable, boolean usedAfter) {
if (expr == null) return ExpectedTypeInfo.EMPTY_ARRAY;
PsiElement parent = expr.getParent();
- while (parent instanceof PsiParenthesizedExpression) {
- expr = (PsiExpression)parent;
- parent = parent.getParent();
- }
MyParentVisitor visitor = new MyParentVisitor(expr, forCompletion, classProvider, voidable, usedAfter);
if (parent != null) {
parent.accept(visitor);
@@ -243,6 +242,25 @@ public class ExpectedTypesProvider {
}
@Override
+ public void visitParenthesizedExpression(PsiParenthesizedExpression expression) {
+ PsiElement parent = expression.getParent();
+ if (parent != null) {
+ final MyParentVisitor visitor = new MyParentVisitor(expression, myForCompletion, myClassProvider, myVoidable, myUsedAfter);
+ parent.accept(visitor);
+ for (final ExpectedTypeInfo info : visitor.myResult) {
+ myResult.add(createInfoImpl(info.getType(), info.getKind(), info.getDefaultType(), TailTypes.RPARENTH, info.getCalledMethod(),
+ new NullableComputable<String>() {
+ @Nullable
+ @Override
+ public String compute() {
+ return ((ExpectedTypeInfoImpl)info).getExpectedName();
+ }
+ }));
+ }
+ }
+ }
+
+ @Override
public void visitAnnotationMethod(@NotNull final PsiAnnotationMethod method) {
if (myExpr == method.getDefaultValue()) {
final PsiType type = method.getReturnType();
diff --git a/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsLineMarkerProvider.java b/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsLineMarkerProvider.java
index e373207222ea..8605a8f91a83 100644
--- a/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsLineMarkerProvider.java
+++ b/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsLineMarkerProvider.java
@@ -51,14 +51,14 @@ public class ExternalAnnotationsLineMarkerProvider implements LineMarkerProvider
if (!(element instanceof PsiModifierListOwner)) return null;
if (element instanceof PsiParameter || element instanceof PsiLocalVariable) return null;
- if (!shouldShowSignature(preferCompiledElement((PsiModifierListOwner)element))) {
+ if (!shouldShowSignature((PsiModifierListOwner)element)) {
return null;
}
final Function<PsiModifierListOwner, String> annotationsCollector = new Function<PsiModifierListOwner, String>() {
@Override
public String fun(PsiModifierListOwner owner) {
- return XmlStringUtil.wrapInHtml(JavaDocInfoGenerator.generateSignature(preferCompiledElement(owner)));
+ return XmlStringUtil.wrapInHtml(JavaDocInfoGenerator.generateSignature(owner));
}
};
return new LineMarkerInfo<PsiModifierListOwner>((PsiModifierListOwner)element, element.getTextOffset(), AllIcons.Gutter.ExtAnnotation,
@@ -67,11 +67,6 @@ public class ExternalAnnotationsLineMarkerProvider implements LineMarkerProvider
GutterIconRenderer.Alignment.LEFT);
}
- private static PsiModifierListOwner preferCompiledElement(PsiModifierListOwner element) {
- PsiElement original = element.getOriginalElement();
- return original instanceof PsiModifierListOwner ? (PsiModifierListOwner)original : element;
- }
-
private static boolean shouldShowSignature(PsiModifierListOwner owner) {
if (hasNonCodeAnnotations(owner)) {
return true;
@@ -111,7 +106,7 @@ public class ExternalAnnotationsLineMarkerProvider implements LineMarkerProvider
if (ref == null) return true;
PsiElement target = ref.resolve();
- return !(target instanceof PsiClass) || JavaDocInfoGenerator.isDocumentedAnnotationType((PsiClass)target);
+ return !(target instanceof PsiClass) || JavaDocInfoGenerator.isDocumentedAnnotationType(target);
}
@Override
diff --git a/java/java-impl/src/com/intellij/codeInsight/TailTypes.java b/java/java-impl/src/com/intellij/codeInsight/TailTypes.java
index 923dd8213019..244067bd3f36 100644
--- a/java/java-impl/src/com/intellij/codeInsight/TailTypes.java
+++ b/java/java-impl/src/com/intellij/codeInsight/TailTypes.java
@@ -28,6 +28,12 @@ public class TailTypes {
return styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES && editor.getDocument().getCharsSequence().charAt(tailOffset - 1) != '(';
}
};
+ public static final TailType RPARENTH = new RParenthTailType(){
+ @Override
+ protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
+ return styleSettings.SPACE_WITHIN_PARENTHESES;
+ }
+ };
public static final TailType IF_RPARENTH = new RParenthTailType(){
@Override
protected boolean isSpaceWithinParentheses(final CommonCodeStyleSettings styleSettings, final Editor editor, final int tailOffset) {
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java
index 8cc9d06aed04..112b243e0ea3 100644
--- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java
+++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java
@@ -544,7 +544,7 @@ public class JavaCompletionUtil {
return JavaClassNameCompletionContributor.createClassLookupItems((PsiClass)completion,
JavaClassNameCompletionContributor.AFTER_NEW.accepts(reference),
JavaClassNameInsertHandler.JAVA_CLASS_INSERT_HANDLER,
- Condition.TRUE);
+ Conditions.<PsiClass>alwaysTrue());
}
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java
index 2a9fc2f4a79f..978e5b24d2e8 100644
--- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java
+++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -28,7 +28,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.util.Conditions;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.patterns.PsiJavaPatterns;
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
@@ -43,7 +43,10 @@ import com.intellij.psi.javadoc.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.TypeConversionUtil;
-import com.intellij.util.*;
+import com.intellij.util.IncorrectOperationException;
+import com.intellij.util.ProcessingContext;
+import com.intellij.util.Processor;
+import com.intellij.util.SystemProperties;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.text.CharArrayUtil;
import org.jetbrains.annotations.NonNls;
@@ -81,7 +84,7 @@ public class JavaDocCompletionContributor extends CompletionContributor {
if (ref instanceof PsiJavaReference) {
result.stopHere();
- final JavaCompletionProcessor processor = new JavaCompletionProcessor(position, TrueFilter.INSTANCE, JavaCompletionProcessor.Options.CHECK_NOTHING, Condition.TRUE);
+ final JavaCompletionProcessor processor = new JavaCompletionProcessor(position, TrueFilter.INSTANCE, JavaCompletionProcessor.Options.CHECK_NOTHING, Conditions.<String>alwaysTrue());
((PsiJavaReference) ref).processVariants(processor);
for (final CompletionElement _item : processor.getResults()) {
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java b/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java
index ad53d9484959..cc67ca51de58 100644
--- a/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java
+++ b/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -20,6 +20,7 @@ import com.intellij.codeInsight.completion.scope.JavaCompletionProcessor;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementWeigher;
import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.util.Conditions;
import com.intellij.patterns.ElementPattern;
import com.intellij.psi.*;
import com.intellij.psi.filters.getters.MembersGetter;
@@ -127,8 +128,7 @@ public class PreferByKindWeigher extends LookupElementWeigher {
};
}
- //noinspection unchecked
- return Condition.FALSE;
+ return Conditions.alwaysFalse();
}
enum MyResult {
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java
index dbf454207cca..d753875208c3 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java
@@ -333,6 +333,9 @@ public class ChangeMethodSignatureFromUsageFix implements IntentionAction/*, Hig
else {
PsiType exprType = RefactoringUtil.getTypeByExpression(expression);
if (exprType == null) return null;
+ if (exprType instanceof PsiDisjunctionType) {
+ exprType = ((PsiDisjunctionType)exprType).getLeastUpperBound();
+ }
final ParameterInfoImpl changedParameterInfo = new ParameterInfoImpl(i, parameter.getName(), exprType);
result.add(changedParameterInfo);
changedParams.add(changedParameterInfo);
@@ -403,6 +406,9 @@ public class ChangeMethodSignatureFromUsageFix implements IntentionAction/*, Hig
if (varargParam != null && pi >= parameters.length) return false;
PsiType exprType = RefactoringUtil.getTypeByExpression(expression);
if (exprType == null) return false;
+ if (exprType instanceof PsiDisjunctionType) {
+ exprType = ((PsiDisjunctionType)exprType).getLeastUpperBound();
+ }
JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(expression.getProject());
String name = suggestUniqueParameterName(codeStyleManager, expression, exprType, existingNames);
final ParameterInfoImpl newParameterInfo = new ParameterInfoImpl(-1, name, exprType, expression.getText().replace('\n', ' '));
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java
index 8e93a6a0c817..ad3d3fc8010a 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java
@@ -182,7 +182,7 @@ public class CreateMethodFromUsageFix extends CreateFromUsageBaseFix {
context);
}
- protected static PsiMethod createMethod(PsiClass targetClass,
+ public static PsiMethod createMethod(PsiClass targetClass,
PsiClass parentClass,
PsiMember enclosingContext,
String methodName) {
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java
new file mode 100644
index 000000000000..8268ee58d44a
--- /dev/null
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java
@@ -0,0 +1,81 @@
+package com.intellij.codeInsight.daemon.impl.quickfix;
+
+import com.intellij.codeInsight.ExpectedTypeInfo;
+import com.intellij.codeInsight.daemon.QuickFixBundle;
+import com.intellij.codeInspection.LocalQuickFix;
+import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Pair;
+import com.intellij.psi.*;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.psi.util.PsiUtil;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+public class CreateStaticMethodQuickFix implements LocalQuickFix {
+ @NotNull
+ private final PsiClass targetClass;
+ @NotNull
+ private final String methodName;
+ @NotNull
+ private final List<String> types;
+
+
+ public CreateStaticMethodQuickFix(@NotNull PsiClass aClass,
+ @NotNull String name,
+ @NotNull List<String> types) {
+ targetClass = aClass;
+ methodName = name;
+ this.types = types;
+ }
+
+
+ @NotNull
+ @Override
+ public String getName() {
+ return QuickFixBundle.message("create.method.from.usage.family");
+ }
+
+ @NotNull
+ @Override
+ public String getFamilyName() {
+ return QuickFixBundle.message("create.method.from.usage.family");
+ }
+
+ @Override
+ public void applyFix(@NotNull final Project project, @NotNull ProblemDescriptor descriptor) {
+ boolean java8Interface = false;
+ if (targetClass.isInterface()) {
+ if (PsiUtil.isLanguageLevel8OrHigher(targetClass)) {
+ java8Interface = true;
+ } else {
+ return;
+ }
+ }
+
+ PsiMethod method = CreateMethodFromUsageFix.createMethod(targetClass, null, null, methodName);
+ if (method == null) {
+ return;
+ }
+
+ if (!java8Interface) {
+ PsiUtil.setModifierProperty(method, PsiModifier.PUBLIC, true);
+ }
+ PsiUtil.setModifierProperty(method, PsiModifier.STATIC, true);
+
+ List<Pair<PsiExpression,PsiType>> args = ContainerUtil.map(types, new Function<String, Pair<PsiExpression, PsiType>>() {
+ @Override
+ public Pair<PsiExpression, PsiType> fun(String s) {
+ return new Pair<PsiExpression, PsiType>(null, PsiType.getTypeByName(s, project, GlobalSearchScope.allScope(project)));
+ }
+ });
+ CreateMethodFromUsageFix.doCreate(targetClass, method, false,
+ args,
+ PsiSubstitutor.UNKNOWN,
+ ExpectedTypeInfo.EMPTY_ARRAY,
+ null);
+ }
+}
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java
index d8caac1d59a6..9c1d38853b2c 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java
@@ -42,12 +42,12 @@ import com.intellij.refactoring.RefactoringActionHandler;
import com.intellij.refactoring.RefactoringActionHandlerFactory;
import com.intellij.ui.components.JBList;
import com.intellij.util.IncorrectOperationException;
-import org.codehaus.groovy.util.ListHashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -55,7 +55,7 @@ import java.util.Map;
* @author cdr
*/
public class MoveClassToModuleFix implements IntentionAction {
- private final Map<PsiClass, Module> myModules = new ListHashMap<PsiClass, Module>();
+ private final Map<PsiClass, Module> myModules = new LinkedHashMap<PsiClass, Module>();
private final String myReferenceName;
private final Module myCurrentModule;
private final PsiDirectory mySourceRoot;
diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithTryFinallySurrounder.java b/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithTryFinallySurrounder.java
index e757ddeacc17..28732a65390b 100644
--- a/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithTryFinallySurrounder.java
+++ b/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithTryFinallySurrounder.java
@@ -19,10 +19,8 @@ import com.intellij.codeInsight.CodeInsightBundle;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.EditorModificationUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
-import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.util.IncorrectOperationException;
@@ -65,16 +63,14 @@ class JavaWithTryFinallySurrounder extends JavaStatementsSurrounder{
if (finallyBlock == null) {
return null;
}
- int offset = finallyBlock.getTextRange().getStartOffset() + 2;
- editor.getCaretModel().moveToOffset(offset);
- final Document document = editor.getDocument();
+ Document document = editor.getDocument();
PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document);
+ TextRange finallyBlockRange = finallyBlock.getTextRange();
+ int newLineOffset = finallyBlockRange.getStartOffset() + 2;
+ editor.getCaretModel().moveToOffset(newLineOffset);
editor.getSelectionModel().removeSelection();
- final PsiStatement[] tryBlockStatements = tryBlock.getStatements();
- LOG.assertTrue(tryBlockStatements.length > 0, tryBlock.getText());
- final PsiStatement firstTryStmt = tryBlockStatements[0];
- final int indent = firstTryStmt.getTextOffset() - document.getLineStartOffset(document.getLineNumber(firstTryStmt.getTextOffset()));
- EditorModificationUtil.insertStringAtCaret(editor, StringUtil.repeat(" ", indent), false, true);
+ CodeStyleManager.getInstance(project).adjustLineIndent(document, newLineOffset);
+ PsiDocumentManager.getInstance(project).commitDocument(document);
return new TextRange(editor.getCaretModel().getOffset(), editor.getCaretModel().getOffset());
}
} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/codeInsight/highlighting/HighlightExceptionsHandlerFactory.java b/java/java-impl/src/com/intellij/codeInsight/highlighting/HighlightExceptionsHandlerFactory.java
index c7bd10cc2b39..a1f206b4ba8e 100644
--- a/java/java-impl/src/com/intellij/codeInsight/highlighting/HighlightExceptionsHandlerFactory.java
+++ b/java/java-impl/src/com/intellij/codeInsight/highlighting/HighlightExceptionsHandlerFactory.java
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.ExceptionUtil;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.util.Conditions;
import com.intellij.psi.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -57,7 +58,7 @@ public class HighlightExceptionsHandlerFactory extends HighlightUsagesHandlerFac
final PsiCodeBlock tryBlock = tryStatement.getTryBlock();
if (tryBlock == null) return null;
final Collection<PsiClassType> psiClassTypes = ExceptionUtil.collectUnhandledExceptions(tryBlock, tryBlock);
- return new HighlightExceptionsHandler(editor, file, target, psiClassTypes.toArray(new PsiClassType[psiClassTypes.size()]), tryBlock, Condition.TRUE);
+ return new HighlightExceptionsHandler(editor, file, target, psiClassTypes.toArray(new PsiClassType[psiClassTypes.size()]), tryBlock, Conditions.<PsiType>alwaysTrue());
}
@Nullable
@@ -112,6 +113,6 @@ public class HighlightExceptionsHandlerFactory extends HighlightUsagesHandlerFac
final Collection<PsiClassType> psiClassTypes = ExceptionUtil.collectUnhandledExceptions(method.getBody(), method.getBody());
- return new HighlightExceptionsHandler(editor, file, target, psiClassTypes.toArray(new PsiClassType[psiClassTypes.size()]), method.getBody(), Condition.TRUE);
+ return new HighlightExceptionsHandler(editor, file, target, psiClassTypes.toArray(new PsiClassType[psiClassTypes.size()]), method.getBody(), Conditions.<PsiType>alwaysTrue());
}
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddAnnotationIntention.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddAnnotationIntention.java
index 899da3035ce5..027928a4f695 100644
--- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddAnnotationIntention.java
+++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddAnnotationIntention.java
@@ -56,9 +56,11 @@ public abstract class AddAnnotationIntention extends BaseIntentionAction {
Pair<String, String[]> annotations = getAnnotations(project);
String toAdd = annotations.first;
String[] toRemove = annotations.second;
- if (toRemove.length > 0 && AnnotationUtil.isAnnotated(owner, toRemove[0], false, false)) return false;
+ if (toRemove.length > 0 && isAnnotatedSkipInferred(owner, toRemove)) {
+ return false;
+ }
setText(AddAnnotationPsiFix.calcText(owner, toAdd));
- if (AnnotationUtil.isAnnotated(owner, toAdd, false, false)) return false;
+ if (isAnnotatedSkipInferred(owner, toAdd)) return false;
if (owner instanceof PsiMethod) {
PsiType returnType = ((PsiMethod)owner).getReturnType();
@@ -73,6 +75,11 @@ public abstract class AddAnnotationIntention extends BaseIntentionAction {
return true;
}
+ private static boolean isAnnotatedSkipInferred(PsiModifierListOwner owner, String... annoFqns) {
+ PsiAnnotation annotation = AnnotationUtil.findAnnotation(owner, false, annoFqns);
+ return annotation != null && !AnnotationUtil.isInferredAnnotation(annotation);
+ }
+
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
PsiModifierListOwner owner = AddAnnotationPsiFix.getContainer(file, editor.getCaretModel().getOffset());