summaryrefslogtreecommitdiff
path: root/java/java-impl
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl')
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java2
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodQualifierFix.java11
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AnonymousTargetClassPreselectionUtil.java45
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageBaseFix.java9
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/editorActions/CopyPasteReferenceProcessor.java11
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java3
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MissingCatchBodyFixer.java5
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/PlainEnterProcessor.java20
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java16
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/intention/impl/FieldFromParameterUtils.java12
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/CastExpressionPostfixTemplate.java10
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceFieldPostfixTemplate.java10
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceVariablePostfixTemplate.java10
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateProvider.java2
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateWithChooser.java42
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/NotExpressionPostfixTemplate.java16
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/ParenthesizedExpressionPostfixTemplate.java12
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/template/postfix/util/JavaPostfixTemplatesUtils.java10
-rw-r--r--java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java4
-rw-r--r--java/java-impl/src/com/intellij/codeInspection/sameParameterValue/SameParameterValueInspection.java2
-rw-r--r--java/java-impl/src/com/intellij/codeInspection/unusedParameters/UnusedParametersInspection.java2
-rw-r--r--java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java10
-rw-r--r--java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java34
-rw-r--r--java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java24
-rw-r--r--java/java-impl/src/com/intellij/openapi/roots/impl/ExcludeCompilerOutputPolicy.java34
-rw-r--r--java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java1
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java3
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java2
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/MethodPropertyReference.java5
-rw-r--r--java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerDialog.java29
-rw-r--r--java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java6
-rw-r--r--java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java10
-rw-r--r--java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java8
-rw-r--r--java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java14
-rw-r--r--java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java2
-rw-r--r--java/java-impl/src/com/intellij/testIntegration/createTest/MissedTestsDialog.java26
-rw-r--r--java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java3
37 files changed, 265 insertions, 200 deletions
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 b60094ffbd6f..ad53d9484959 100644
--- a/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java
+++ b/java/java-impl/src/com/intellij/codeInsight/completion/PreferByKindWeigher.java
@@ -138,8 +138,8 @@ public class PreferByKindWeigher extends LookupElementWeigher {
qualifiedWithField,
qualifiedWithGetter,
superMethodParameters,
- expectedTypeConstant,
field,
+ expectedTypeConstant,
getter,
normal,
collectionFactory,
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodQualifierFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodQualifierFix.java
index ff851372e208..4ab9d43fbc1d 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodQualifierFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodQualifierFix.java
@@ -69,10 +69,14 @@ public class AddMethodQualifierFix implements IntentionAction {
if (element == null || !element.isValid()) {
return false;
}
+ return getOrFindCandidates().size() != 0;
+ }
+
+ private synchronized List<PsiVariable> getOrFindCandidates() {
if (myCandidates == null) {
findCandidates();
}
- return myCandidates.size() != 0;
+ return myCandidates;
}
private void findCandidates() {
@@ -84,6 +88,9 @@ public class AddMethodQualifierFix implements IntentionAction {
}
for (final PsiVariable var : CreateFromUsageUtils.guessMatchingVariables(methodCallElement)) {
+ if (var.getName() == null) {
+ continue;
+ }
final PsiType type = var.getType();
if (!(type instanceof PsiClassType)) {
continue;
@@ -132,7 +139,7 @@ public class AddMethodQualifierFix implements IntentionAction {
@NotNull
@Override
public String getTextFor(final PsiVariable value) {
- return ObjectUtils.assertNotNull(value.getName());
+ return value.getName();
}
@Override
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AnonymousTargetClassPreselectionUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AnonymousTargetClassPreselectionUtil.java
new file mode 100644
index 000000000000..421c43cabe88
--- /dev/null
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AnonymousTargetClassPreselectionUtil.java
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ * 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.codeInsight.daemon.impl.quickfix;
+
+import com.intellij.ide.util.PropertiesComponent;
+import com.intellij.psi.PsiAnonymousClass;
+import com.intellij.psi.PsiClass;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collection;
+
+public class AnonymousTargetClassPreselectionUtil {
+ private static final String PRESELECT_ANONYMOUS = "create.member.preselect.anonymous";
+
+ public static void rememberSelection(PsiClass aClass, PsiClass firstClass) {
+ if (firstClass instanceof PsiAnonymousClass) {
+ PropertiesComponent.getInstance().setValue(PRESELECT_ANONYMOUS, String.valueOf(aClass == firstClass));
+ }
+ }
+
+ @Nullable
+ public static PsiClass getPreselection(Collection<PsiClass> classes, PsiClass firstClass) {
+ if (firstClass instanceof PsiAnonymousClass && !PropertiesComponent.getInstance().getBoolean(PRESELECT_ANONYMOUS, true)) {
+ for (PsiClass aClass : classes) {
+ if (!(aClass instanceof PsiAnonymousClass)) {
+ return aClass;
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageBaseFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageBaseFix.java
index 09b83e2a489f..abe9368374e8 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageBaseFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageBaseFix.java
@@ -119,7 +119,8 @@ public abstract class CreateFromUsageBaseFix extends BaseIntentionAction {
protected abstract PsiElement getElement();
private void chooseTargetClass(List<PsiClass> classes, final Editor editor) {
- final Project project = classes.get(0).getProject();
+ final PsiClass firstClass = classes.get(0);
+ final Project project = firstClass.getProject();
final JList list = new JBList(classes);
PsiElementListCellRenderer renderer = new PsiClassListCellRenderer();
@@ -128,12 +129,18 @@ public abstract class CreateFromUsageBaseFix extends BaseIntentionAction {
final PopupChooserBuilder builder = new PopupChooserBuilder(list);
renderer.installSpeedSearch(builder);
+ final PsiClass preselection = AnonymousTargetClassPreselectionUtil.getPreselection(classes, firstClass);
+ if (preselection != null) {
+ list.setSelectedValue(preselection, true);
+ }
+
Runnable runnable = new Runnable() {
@Override
public void run() {
int index = list.getSelectedIndex();
if (index < 0) return;
final PsiClass aClass = (PsiClass) list.getSelectedValue();
+ AnonymousTargetClassPreselectionUtil.rememberSelection(aClass, firstClass);
CommandProcessor.getInstance().executeCommand(project, new Runnable() {
@Override
public void run() {
diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/CopyPasteReferenceProcessor.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/CopyPasteReferenceProcessor.java
index 906dfa6258de..e6991736c0e3 100644
--- a/java/java-impl/src/com/intellij/codeInsight/editorActions/CopyPasteReferenceProcessor.java
+++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/CopyPasteReferenceProcessor.java
@@ -144,6 +144,17 @@ public abstract class CopyPasteReferenceProcessor<TRef extends PsiElement> exten
RangeMarker bounds,
ReferenceData[] referenceData);
+ protected PsiElement resolveReferenceIgnoreOverriding(PsiPolyVariantReference reference) {
+ PsiElement referent = reference.resolve();
+ if (referent == null) {
+ final ResolveResult[] results = reference.multiResolve(true);
+ if (results.length > 0) {
+ referent = results[0].getElement();
+ }
+ }
+ return referent;
+ }
+
protected abstract void restoreReferences(ReferenceData[] referenceData,
TRef[] refs);
diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java
index 51edddd250aa..76be78b7932d 100644
--- a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java
+++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java
@@ -88,7 +88,8 @@ public class JavaCopyPasteReferenceProcessor extends CopyPasteReferenceProcessor
}
else {
if (reference instanceof PsiReferenceExpression) {
- PsiElement referent = reference.resolve();
+ PsiElement referent = resolveReferenceIgnoreOverriding(reference);
+
if (!(referent instanceof PsiNamedElement)
|| !data.staticMemberName.equals(((PsiNamedElement)referent).getName())
|| !(referent instanceof PsiMember)
diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MissingCatchBodyFixer.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MissingCatchBodyFixer.java
index 1d4d281aea68..08e06283d4a5 100644
--- a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MissingCatchBodyFixer.java
+++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MissingCatchBodyFixer.java
@@ -36,7 +36,7 @@ public class MissingCatchBodyFixer implements Fixer {
final Document doc = editor.getDocument();
PsiCodeBlock body = catchSection.getCatchBlock();
- if (body != null && startLine(doc, body) == startLine(doc, catchSection)) return;
+ if (body != null && body.getLBrace() != null && body.getRBrace() != null) return;
final PsiJavaToken rParenth = catchSection.getRParenth();
if (rParenth == null) return;
@@ -44,7 +44,4 @@ public class MissingCatchBodyFixer implements Fixer {
doc.insertString(rParenth.getTextRange().getEndOffset(), "{}");
}
- private static int startLine(Document doc, PsiElement psiElement) {
- return doc.getLineNumber(psiElement.getTextRange().getStartOffset());
- }
} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/PlainEnterProcessor.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/PlainEnterProcessor.java
index 6bafcc00d983..884442c778cc 100644
--- a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/PlainEnterProcessor.java
+++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/PlainEnterProcessor.java
@@ -83,6 +83,22 @@ public class PlainEnterProcessor implements EnterProcessor {
@Nullable
private static PsiCodeBlock getControlStatementBlock(int caret, PsiElement element) {
+ if (element instanceof PsiTryStatement) {
+ PsiCodeBlock tryBlock = ((PsiTryStatement)element).getTryBlock();
+ if (tryBlock != null && caret < tryBlock.getTextRange().getEndOffset()) return tryBlock;
+
+ for (PsiCodeBlock catchBlock : ((PsiTryStatement)element).getCatchBlocks()) {
+ if (catchBlock != null && caret < catchBlock.getTextRange().getEndOffset()) return catchBlock;
+ }
+
+ return ((PsiTryStatement)element).getFinallyBlock();
+ }
+
+ if (element instanceof PsiMethod) {
+ PsiCodeBlock methodBody = ((PsiMethod)element).getBody();
+ if (methodBody != null) return methodBody;
+ }
+
PsiStatement body = null;
if (element instanceof PsiIfStatement) {
body = ((PsiIfStatement)element).getThenBranch();
@@ -102,10 +118,6 @@ public class PlainEnterProcessor implements EnterProcessor {
else if (element instanceof PsiDoWhileStatement) {
body = ((PsiDoWhileStatement)element).getBody();
}
- else if (element instanceof PsiMethod) {
- PsiCodeBlock methodBody = ((PsiMethod)element).getBody();
- if (methodBody != null) return methodBody;
- }
return body instanceof PsiBlockStatement ? ((PsiBlockStatement)body).getCodeBlock() : null;
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java
index fd85d1124171..daf2e3002dd2 100644
--- a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java
+++ b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java
@@ -450,18 +450,24 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc
final PsiJavaCodeReferenceElement element = annotation.getNameReferenceElement();
if (element != null) {
final PsiElement resolved = element.resolve();
- if (resolved instanceof PsiClass && !AnnotationUtil.isAnnotated((PsiClass)resolved, "java.lang.annotation.Documented", false)) continue;
+ if (resolved instanceof PsiClass && !AnnotationUtil.isAnnotated((PsiClass)resolved, "java.lang.annotation.Documented", false, true)) {
+ continue;
+ }
String referenceName = element.getReferenceName();
- if (!shownAnnotations.add(referenceName)) continue;
-
- if (lastSize != buffer.length()) buffer.append(" ");
- buffer.append("@").append(referenceName);
+ if (shownAnnotations.add(referenceName) || isRepeatableAnnotation(resolved)) {
+ if (lastSize != buffer.length()) buffer.append(" ");
+ buffer.append("@").append(referenceName);
+ }
}
}
if (lastSize != buffer.length()) buffer.append(" ");
}
+ private static boolean isRepeatableAnnotation(PsiElement resolved) {
+ return resolved instanceof PsiClass && !AnnotationUtil.isAnnotated((PsiModifierListOwner)resolved, CommonClassNames.JAVA_LANG_ANNOTATION_REPEATABLE, false, true);
+ }
+
@Override
public void updateUI(final Object p, @NotNull final ParameterInfoUIContext context) {
if (p instanceof CandidateInfo) {
diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/FieldFromParameterUtils.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/FieldFromParameterUtils.java
index ccec3c3cab07..37fb882e5e66 100644
--- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/FieldFromParameterUtils.java
+++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/FieldFromParameterUtils.java
@@ -187,14 +187,14 @@ public final class FieldFromParameterUtils {
modifierList.setModifierProperty(PsiModifier.FINAL, isFinal);
final NullableNotNullManager manager = NullableNotNullManager.getInstance(project);
- final String nullable = manager.getNullable(parameter);
- if (nullable != null) {
- modifierList.addAfter(factory.createAnnotationFromText("@" + nullable, field), null);
+ final PsiAnnotation nullable = manager.getNullableAnnotation(parameter, false);
+ if (nullable != null && !manager.isContainerAnnotation(nullable)) {
+ modifierList.addAfter(factory.createAnnotationFromText("@" + nullable.getQualifiedName(), field), null);
}
else if (isFinal) {
- final String notNull = manager.getNotNull(parameter);
- if (notNull != null) {
- modifierList.addAfter(factory.createAnnotationFromText("@" + notNull, field), null);
+ final PsiAnnotation notNull = manager.getNotNullAnnotation(parameter, false);
+ if (notNull != null && !manager.isContainerAnnotation(notNull)) {
+ modifierList.addAfter(factory.createAnnotationFromText("@" + notNull.getQualifiedName(), field), null);
}
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/CastExpressionPostfixTemplate.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/CastExpressionPostfixTemplate.java
index 952987a72c19..14059174cc16 100644
--- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/CastExpressionPostfixTemplate.java
+++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/CastExpressionPostfixTemplate.java
@@ -20,13 +20,17 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
-public class CastExpressionPostfixTemplate extends JavaPostfixTemplateWithChooser {
+import static com.intellij.codeInsight.template.postfix.templates.PostfixTemplatesUtils.selectorWithChooser;
+import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.IS_NON_VOID;
+import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.JAVA_PSI_INFO;
+
+public class CastExpressionPostfixTemplate extends PostfixTemplateWithExpressionSelector {
public CastExpressionPostfixTemplate() {
- super("cast", "((SomeType) expr)");
+ super("cast", "((SomeType) expr)", JAVA_PSI_INFO, selectorWithChooser(IS_NON_VOID));
}
@Override
- protected void doIt(@NotNull final Editor editor, @NotNull final PsiElement expression) {
+ protected void expandForChooseExpression(@NotNull PsiElement expression, @NotNull Editor editor) {
PostfixTemplatesUtils.surround(new JavaWithCastSurrounder(), editor, expression);
}
} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceFieldPostfixTemplate.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceFieldPostfixTemplate.java
index 40da7fd94b88..2bac79d890bd 100644
--- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceFieldPostfixTemplate.java
+++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceFieldPostfixTemplate.java
@@ -23,13 +23,17 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.introduceField.IntroduceFieldHandler;
import org.jetbrains.annotations.NotNull;
-public class IntroduceFieldPostfixTemplate extends JavaPostfixTemplateWithChooser {
+import static com.intellij.codeInsight.template.postfix.templates.PostfixTemplatesUtils.selectorWithChooser;
+import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.IS_NON_VOID;
+import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.JAVA_PSI_INFO;
+
+public class IntroduceFieldPostfixTemplate extends PostfixTemplateWithExpressionSelector {
public IntroduceFieldPostfixTemplate() {
- super("field", "myField = expr");
+ super("field", "myField = expr", JAVA_PSI_INFO, selectorWithChooser(IS_NON_VOID));
}
@Override
- protected void doIt(@NotNull Editor editor, @NotNull PsiElement expression) {
+ protected void expandForChooseExpression(@NotNull PsiElement expression, @NotNull Editor editor) {
IntroduceFieldHandler handler =
ApplicationManager.getApplication().isUnitTestMode() ? getMockHandler(expression) : new IntroduceFieldHandler();
handler.invoke(expression.getProject(), new PsiElement[]{expression}, null);
diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceVariablePostfixTemplate.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceVariablePostfixTemplate.java
index 57c03f9501fa..be2dc23850e7 100644
--- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceVariablePostfixTemplate.java
+++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/IntroduceVariablePostfixTemplate.java
@@ -28,14 +28,18 @@ import com.intellij.refactoring.introduceVariable.IntroduceVariableSettings;
import com.intellij.refactoring.ui.TypeSelectorManagerImpl;
import org.jetbrains.annotations.NotNull;
+import static com.intellij.codeInsight.template.postfix.templates.PostfixTemplatesUtils.selectorWithChooser;
+import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.IS_NON_VOID;
+import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.JAVA_PSI_INFO;
+
// todo: support for int[].var (parses as .class access!)
-public class IntroduceVariablePostfixTemplate extends JavaPostfixTemplateWithChooser {
+public class IntroduceVariablePostfixTemplate extends PostfixTemplateWithExpressionSelector {
public IntroduceVariablePostfixTemplate() {
- super("var", "T name = expr");
+ super("var", "T name = expr", JAVA_PSI_INFO, selectorWithChooser(IS_NON_VOID));
}
@Override
- protected void doIt(@NotNull Editor editor, @NotNull PsiElement expression) {
+ protected void expandForChooseExpression(@NotNull PsiElement expression, @NotNull Editor editor) {
// for advanced stuff use ((PsiJavaCodeReferenceElement)expression).advancedResolve(true).getElement();
IntroduceVariableHandler handler =
ApplicationManager.getApplication().isUnitTestMode() ? getMockHandler() : new IntroduceVariableHandler();
diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateProvider.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateProvider.java
index 148f4bb187db..629d4dd02115 100644
--- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateProvider.java
+++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateProvider.java
@@ -144,6 +144,6 @@ public class JavaPostfixTemplateProvider implements PostfixTemplateProvider {
}
private static boolean isSemicolonNeeded(@NotNull PsiFile file, @NotNull Editor editor) {
- return JavaCompletionContributor.semicolonNeeded(editor, file, CompletionInitializationContext.calcStartOffset(editor));
+ return JavaCompletionContributor.semicolonNeeded(editor, file, CompletionInitializationContext.calcStartOffset(editor.getCaretModel().getCurrentCaret()));
}
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateWithChooser.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateWithChooser.java
deleted file mode 100644
index 72de706f4858..000000000000
--- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/JavaPostfixTemplateWithChooser.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.
- * 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.codeInsight.template.postfix.templates;
-
-
-import com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils;
-import com.intellij.openapi.util.Condition;
-import com.intellij.psi.PsiElement;
-import org.jetbrains.annotations.NotNull;
-
-import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.JAVA_PSI_INFO;
-
-public abstract class JavaPostfixTemplateWithChooser extends ExpressionPostfixTemplateWithChooser {
-
-
- protected JavaPostfixTemplateWithChooser(@NotNull String name, @NotNull String example) {
- super(name, example, JAVA_PSI_INFO);
- }
-
- protected JavaPostfixTemplateWithChooser(@NotNull String name, @NotNull String key, @NotNull String example) {
- super(name, key, example, JAVA_PSI_INFO);
- }
-
- @NotNull
- @Override
- protected Condition<PsiElement> getTypeCondition() {
- return JavaPostfixTemplatesUtils.IS_NON_VOID;
- }
-}
diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/NotExpressionPostfixTemplate.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/NotExpressionPostfixTemplate.java
index ac6f22c5092f..6160433cefe3 100644
--- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/NotExpressionPostfixTemplate.java
+++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/NotExpressionPostfixTemplate.java
@@ -15,26 +15,16 @@
*/
package com.intellij.codeInsight.template.postfix.templates;
-import com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils;
-import com.intellij.openapi.util.Condition;
-import com.intellij.psi.PsiElement;
-import org.jetbrains.annotations.NotNull;
-
+import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.IS_BOOLEAN;
import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.JAVA_PSI_INFO;
public class NotExpressionPostfixTemplate extends NotPostfixTemplate {
public NotExpressionPostfixTemplate() {
- super(JAVA_PSI_INFO);
+ super(JAVA_PSI_INFO, IS_BOOLEAN);
}
public NotExpressionPostfixTemplate(String alias) {
- super(alias, alias, "!expr", JAVA_PSI_INFO);
- }
-
- @NotNull
- @Override
- protected Condition<PsiElement> getTypeCondition() {
- return JavaPostfixTemplatesUtils.IS_BOOLEAN;
+ super(alias, alias, "!expr", JAVA_PSI_INFO, IS_BOOLEAN);
}
} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/ParenthesizedExpressionPostfixTemplate.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/ParenthesizedExpressionPostfixTemplate.java
index 68b5c48fcd15..46c0c30b24f5 100644
--- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/ParenthesizedExpressionPostfixTemplate.java
+++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/ParenthesizedExpressionPostfixTemplate.java
@@ -15,21 +15,11 @@
*/
package com.intellij.codeInsight.template.postfix.templates;
-import com.intellij.openapi.util.Condition;
-import com.intellij.psi.PsiElement;
-import org.jetbrains.annotations.NotNull;
-
import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.IS_NON_VOID;
import static com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.JAVA_PSI_INFO;
public class ParenthesizedExpressionPostfixTemplate extends ParenthesizedPostfixTemplate {
public ParenthesizedExpressionPostfixTemplate() {
- super(JAVA_PSI_INFO);
- }
-
- @NotNull
- @Override
- protected Condition<PsiElement> getTypeCondition() {
- return IS_NON_VOID;
+ super(JAVA_PSI_INFO, IS_NON_VOID);
}
} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/util/JavaPostfixTemplatesUtils.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/util/JavaPostfixTemplatesUtils.java
index e217175cdab9..2142c8fd33da 100644
--- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/util/JavaPostfixTemplatesUtils.java
+++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/util/JavaPostfixTemplatesUtils.java
@@ -16,7 +16,7 @@
package com.intellij.codeInsight.template.postfix.util;
import com.intellij.codeInsight.CodeInsightServicesUtil;
-import com.intellij.codeInsight.template.postfix.templates.PostfixTemplatePsiInfoBase;
+import com.intellij.codeInsight.template.postfix.templates.PostfixTemplatePsiInfo;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.*;
@@ -36,7 +36,7 @@ public abstract class JavaPostfixTemplatesUtils {
private JavaPostfixTemplatesUtils() {
}
- public static final PostfixTemplatePsiInfoBase JAVA_PSI_INFO = new PostfixTemplatePsiInfoBase() {
+ public static final PostfixTemplatePsiInfo JAVA_PSI_INFO = new PostfixTemplatePsiInfo() {
@NotNull
@Override
@@ -136,7 +136,11 @@ public abstract class JavaPostfixTemplatesUtils {
@Contract("null -> false")
public static boolean isNotPrimitiveTypeExpression(@Nullable PsiExpression expression) {
- return expression != null && !(expression.getType() instanceof PsiPrimitiveType);
+ if (expression == null) {
+ return false;
+ }
+ PsiType type = expression.getType();
+ return type != null && !(type instanceof PsiPrimitiveType);
}
@Contract("null -> false")
diff --git a/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java b/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java
index aff69ec85da9..b3aed0603150 100644
--- a/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java
+++ b/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java
@@ -194,7 +194,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext
final SearchScope searchScope = new GlobalSearchScope(refManager.getProject()) {
@Override
public boolean contains(@NotNull VirtualFile file) {
- return !scope.contains(file) || file.getFileType() != StdFileTypes.JAVA;
+ return scope != null && !scope.contains(file) || file.getFileType() != StdFileTypes.JAVA;
}
@Override
@@ -394,7 +394,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext
@Override
public boolean execute(PsiReference reference) {
AnalysisScope scope = context.getRefManager().getScope();
- if (scope.contains(reference.getElement()) && reference.getElement().getLanguage() == StdLanguages.JAVA ||
+ if (scope != null && scope.contains(reference.getElement()) && reference.getElement().getLanguage() == StdLanguages.JAVA ||
PsiTreeUtil.getParentOfType(reference.getElement(), PsiDocComment.class) != null) {
return true;
}
diff --git a/java/java-impl/src/com/intellij/codeInspection/sameParameterValue/SameParameterValueInspection.java b/java/java-impl/src/com/intellij/codeInspection/sameParameterValue/SameParameterValueInspection.java
index baab93de8d25..bcfea46a569c 100644
--- a/java/java-impl/src/com/intellij/codeInspection/sameParameterValue/SameParameterValueInspection.java
+++ b/java/java-impl/src/com/intellij/codeInspection/sameParameterValue/SameParameterValueInspection.java
@@ -76,7 +76,7 @@ public class SameParameterValueInspection extends SameParameterValueInspectionBa
public void applyFix(@NotNull final Project project, @NotNull ProblemDescriptor descriptor) {
final PsiElement element = descriptor.getPsiElement();
final PsiMethod method = PsiTreeUtil.getParentOfType(element, PsiMethod.class);
- LOG.assertTrue(method != null);
+ if (method == null) return;
PsiParameter parameter = PsiTreeUtil.getParentOfType(element, PsiParameter.class, false);
if (parameter == null) {
final PsiParameter[] parameters = method.getParameterList().getParameters();
diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedParameters/UnusedParametersInspection.java b/java/java-impl/src/com/intellij/codeInspection/unusedParameters/UnusedParametersInspection.java
index c33d0d68b8cb..bb97f5cd78d5 100644
--- a/java/java-impl/src/com/intellij/codeInspection/unusedParameters/UnusedParametersInspection.java
+++ b/java/java-impl/src/com/intellij/codeInspection/unusedParameters/UnusedParametersInspection.java
@@ -132,7 +132,7 @@ public class UnusedParametersInspection extends GlobalJavaBatchInspectionTool {
int idx = refParameter.getIndex();
final boolean[] found = {false};
for (int i = 0; i < derived.length && !found[0]; i++) {
- if (!scope.contains(derived[i])) {
+ if (scope == null || !scope.contains(derived[i])) {
final PsiParameter[] parameters = derived[i].getParameterList().getParameters();
if (parameters.length >= idx) continue;
PsiParameter psiParameter = parameters[idx];
diff --git a/java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java b/java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java
index 38ee7449994a..51beb4239fc3 100644
--- a/java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java
+++ b/java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java
@@ -63,7 +63,7 @@ public class FieldCanBeLocalInspection extends FieldCanBeLocalInspectionBase {
@Override
protected PsiElement moveDeclaration(@NotNull final Project project, @NotNull final PsiField variable) {
final Map<PsiCodeBlock, Collection<PsiReference>> refs = new HashMap<PsiCodeBlock, Collection<PsiReference>>();
- groupByCodeBlocks(ReferencesSearch.search(variable).findAll(), refs);
+ if (!groupByCodeBlocks(ReferencesSearch.search(variable).findAll(), refs)) return null;
PsiElement element = null;
for (Collection<PsiReference> psiReferences : refs.values()) {
element = super.moveDeclaration(project, variable, psiReferences, false);
@@ -82,11 +82,14 @@ public class FieldCanBeLocalInspection extends FieldCanBeLocalInspectionBase {
return element;
}
- private static void groupByCodeBlocks(final Collection<PsiReference> allReferences, Map<PsiCodeBlock, Collection<PsiReference>> refs) {
+ private static boolean groupByCodeBlocks(final Collection<PsiReference> allReferences, Map<PsiCodeBlock, Collection<PsiReference>> refs) {
for (PsiReference psiReference : allReferences) {
final PsiElement element = psiReference.getElement();
final PsiCodeBlock block = PsiTreeUtil.getTopmostParentOfType(element, PsiCodeBlock.class);
- LOG.assertTrue(block != null);
+ if (block == null) {
+ return false;
+ }
+
Collection<PsiReference> references = refs.get(block);
if (references == null) {
references = new ArrayList<PsiReference>();
@@ -95,6 +98,7 @@ public class FieldCanBeLocalInspection extends FieldCanBeLocalInspectionBase {
}
references.add(psiReference);
}
+ return true;
}
private static boolean findExistentBlock(Map<PsiCodeBlock, Collection<PsiReference>> refs,
diff --git a/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java b/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java
index 98f1fbeddfca..73fcc83df646 100644
--- a/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java
+++ b/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java
@@ -28,9 +28,7 @@ import com.intellij.ide.SelectInTarget;
import com.intellij.ide.impl.PackagesPaneSelectInTarget;
import com.intellij.ide.projectView.ProjectView;
import com.intellij.ide.projectView.ViewSettings;
-import com.intellij.ide.projectView.impl.nodes.PackageElement;
-import com.intellij.ide.projectView.impl.nodes.PackageUtil;
-import com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode;
+import com.intellij.ide.projectView.impl.nodes.*;
import com.intellij.ide.util.DeleteHandler;
import com.intellij.ide.util.treeView.AbstractTreeBuilder;
import com.intellij.ide.util.treeView.AbstractTreeNode;
@@ -48,8 +46,8 @@ import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiPackage;
import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.util.PsiUtilBase;
import com.intellij.psi.util.PsiUtilCore;
+import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -140,14 +138,30 @@ public final class PackageViewPane extends AbstractProjectViewPSIPane {
@Override
public PsiDirectory[] getSelectedDirectories() {
- final PackageElement packageElement = getSelectedPackageElement();
- if (packageElement != null) {
- final Module module = packageElement.getModule();
- final PsiPackage aPackage = packageElement.getPackage();
- if (module != null && aPackage != null) {
- return aPackage.getDirectories(GlobalSearchScope.moduleScope(module));
+ List<PsiDirectory> directories = ContainerUtil.newArrayList();
+ for (PackageElementNode node : getSelectedNodes(PackageElementNode.class)) {
+ PackageElement packageElement = node.getValue();
+ PsiPackage aPackage = packageElement != null ? packageElement.getPackage() : null;
+ final Module module = packageElement != null ? packageElement.getModule() : null;
+ if (aPackage != null && module != null) {
+ GlobalSearchScope scope = GlobalSearchScope.moduleScope(module);
+ Collections.addAll(directories, aPackage.getDirectories(scope));
+
+ Object parentValue = node.getParent().getValue();
+ PsiPackage parentNodePackage = parentValue instanceof PackageElement ? ((PackageElement)parentValue).getPackage() : null;
+ while (true) {
+ aPackage = aPackage.getParentPackage();
+ if (aPackage == null || aPackage.getQualifiedName().isEmpty() || aPackage.equals(parentNodePackage)) {
+ break;
+ }
+ Collections.addAll(directories, aPackage.getDirectories(scope));
+ }
}
}
+ if (!directories.isEmpty()) {
+ return directories.toArray(new PsiDirectory[directories.size()]);
+ }
+
return super.getSelectedDirectories();
}
diff --git a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java
index b0cbc06d048e..2f5418631dae 100644
--- a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java
+++ b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java
@@ -19,10 +19,14 @@ import com.intellij.navigation.ChooseByNameContributorEx;
import com.intellij.navigation.GotoClassContributor;
import com.intellij.navigation.NavigationItem;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiClass;
+import com.intellij.psi.codeStyle.MinusculeMatcher;
+import com.intellij.psi.codeStyle.NameUtil;
import com.intellij.psi.presentation.java.SymbolPresentationUtil;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiShortNamesCache;
+import com.intellij.psi.util.ClassUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
@@ -32,6 +36,8 @@ import com.intellij.util.indexing.IdFilter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.regex.Matcher;
+
public class DefaultClassNavigationContributor implements ChooseByNameContributorEx, GotoClassContributor {
@Override
@NotNull
@@ -74,7 +80,7 @@ public class DefaultClassNavigationContributor implements ChooseByNameContributo
@Override
public String getQualifiedNameSeparator() {
- return ".";
+ return "$";
}
@Override
@@ -86,12 +92,28 @@ public class DefaultClassNavigationContributor implements ChooseByNameContributo
public void processElementsWithName(@NotNull String name,
@NotNull final Processor<NavigationItem> processor,
@NotNull final FindSymbolParameters parameters) {
+ String namePattern = StringUtil.getShortName(parameters.getCompletePattern());
+ boolean hasDollar = namePattern.contains("$");
+ if (hasDollar) {
+ Matcher matcher = ChooseByNamePopup.patternToDetectAnonymousClasses.matcher(namePattern);
+ if (matcher.matches()) {
+ namePattern = matcher.group(1);
+ hasDollar = namePattern.contains("$");
+ }
+ }
+ final MinusculeMatcher innerMatcher = hasDollar ? new MinusculeMatcher("*" + namePattern, NameUtil.MatchingCaseSensitivity.NONE) : null;
PsiShortNamesCache.getInstance(parameters.getProject()).processClassesWithName(name, new Processor<PsiClass>() {
final boolean isAnnotation = parameters.getLocalPatternName().startsWith("@");
+
@Override
public boolean process(PsiClass aClass) {
if (aClass.getContainingFile().getVirtualFile() == null || !aClass.isPhysical()) return true;
if (isAnnotation && !aClass.isAnnotationType()) return true;
+ if (innerMatcher != null) {
+ if (aClass.getContainingClass() == null) return true;
+ String jvmQName = ClassUtil.getJVMClassName(aClass);
+ if (jvmQName == null || !innerMatcher.matches(StringUtil.getShortName(jvmQName))) return true;
+ }
return processor.process(aClass);
}
}, parameters.getSearchScope(), parameters.getIdFilter());
diff --git a/java/java-impl/src/com/intellij/openapi/roots/impl/ExcludeCompilerOutputPolicy.java b/java/java-impl/src/com/intellij/openapi/roots/impl/ExcludeCompilerOutputPolicy.java
index adbacfcd38ce..c825d8318edc 100644
--- a/java/java-impl/src/com/intellij/openapi/roots/impl/ExcludeCompilerOutputPolicy.java
+++ b/java/java-impl/src/com/intellij/openapi/roots/impl/ExcludeCompilerOutputPolicy.java
@@ -15,16 +15,12 @@
*/
package com.intellij.openapi.roots.impl;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.CompilerModuleExtension;
import com.intellij.openapi.roots.CompilerProjectExtension;
import com.intellij.openapi.roots.ModuleRootModel;
-import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
-import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -40,26 +36,6 @@ public class ExcludeCompilerOutputPolicy implements DirectoryIndexExcludePolicy
myProject = project;
}
- @Override
- public boolean isExcludeRoot(final VirtualFile file) {
- CompilerProjectExtension compilerProjectExtension = CompilerProjectExtension.getInstance(myProject);
- if (isEqualWithFileOrUrl(file, compilerProjectExtension.getCompilerOutput(), compilerProjectExtension.getCompilerOutputUrl())) return true;
-
- for (Module m : ModuleManager.getInstance(myProject).getModules()) {
- CompilerModuleExtension rm = CompilerModuleExtension.getInstance(m);
- if (isEqualWithFileOrUrl(file, rm.getCompilerOutputPath(), rm.getCompilerOutputUrl())) return true;
- if (isEqualWithFileOrUrl(file, rm.getCompilerOutputPathForTests(), rm.getCompilerOutputUrlForTests())) return true;
- }
- return false;
- }
-
- @Override
- public boolean isExcludeRootForModule(@NotNull final Module module, final VirtualFile excludeRoot) {
- final CompilerModuleExtension compilerModuleExtension = CompilerModuleExtension.getInstance(module);
- return Comparing.equal(compilerModuleExtension.getCompilerOutputPath(), excludeRoot) ||
- Comparing.equal(compilerModuleExtension.getCompilerOutputPathForTests(), excludeRoot);
- }
-
@NotNull
@Override
public VirtualFile[] getExcludeRootsForProject() {
@@ -88,14 +64,4 @@ public class ExcludeCompilerOutputPolicy implements DirectoryIndexExcludePolicy
}
return result.isEmpty() ? VirtualFilePointer.EMPTY_ARRAY : result.toArray(new VirtualFilePointer[result.size()]);
}
-
- private static boolean isEqualWithFileOrUrl(VirtualFile file, VirtualFile fileToCompareWith, String url) {
- if (fileToCompareWith != null) {
- if (Comparing.equal(fileToCompareWith, file)) return true;
- }
- else if (url != null) {
- if (FileUtil.pathsEqual(url, file.getUrl())) return true;
- }
- return false;
- }
}
diff --git a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java
index 3651fa1afe3a..ff1170b64bef 100644
--- a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java
+++ b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaArrangementVisitor.java
@@ -280,6 +280,7 @@ public class JavaArrangementVisitor extends JavaRecursiveElementVisitor {
if (ref instanceof PsiField && containingClassFields.contains(ref)) {
referencedElements.add((PsiField)ref);
}
+ super.visitReferenceExpression(expression);
}
});
diff --git a/java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java b/java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java
index a8316f8dc0ee..eaa93875ba15 100644
--- a/java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java
+++ b/java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java
@@ -18,6 +18,7 @@ package com.intellij.psi.impl.search;
import com.intellij.lang.LanguageParserDefinitions;
import com.intellij.lang.ParserDefinition;
import com.intellij.lexer.Lexer;
+import com.intellij.openapi.editor.impl.EditorHighlighterCache;
import com.intellij.psi.JspPsiUtil;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.tree.StdTokenSets;
@@ -34,7 +35,7 @@ public class JspIndexPatternBuilder implements IndexPatternBuilder {
@Override
public Lexer getIndexingLexer(@NotNull final PsiFile file) {
if (JspPsiUtil.isInJspFile(file)) {
- return LexerEditorHighlighterLexer.getLexerBasedOnLexerHighlighter(file.getText(), file.getVirtualFile(), file.getProject());
+ return EditorHighlighterCache.getLexerBasedOnLexerHighlighter(file.getText(), file.getVirtualFile(), file.getProject());
}
return null;
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java
index 827a3d128a24..5380043307c7 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java
@@ -142,9 +142,7 @@ public class FilePathReferenceProvider extends PsiReferenceProvider {
@NotNull
public static Collection<PsiFileSystemItem> getRoots(final Module thisModule, boolean includingClasses) {
if (thisModule == null) return Collections.emptyList();
- Set<Module> modules = new com.intellij.util.containers.HashSet<Module>();
ModuleRootManager moduleRootManager = ModuleRootManager.getInstance(thisModule);
- ModuleUtilCore.getDependencies(thisModule, modules);
List<PsiFileSystemItem> result = new ArrayList<PsiFileSystemItem>();
final PsiManager psiManager = PsiManager.getInstance(thisModule.getProject());
if (includingClasses) {
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/MethodPropertyReference.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/MethodPropertyReference.java
index f7dc89ce5b80..307d608ddbd8 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/MethodPropertyReference.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/MethodPropertyReference.java
@@ -16,7 +16,6 @@
package com.intellij.psi.impl.source.resolve.reference.impl.providers;
import com.intellij.psi.*;
-import com.intellij.psi.jsp.JspImplicitVariable;
import com.intellij.psi.jsp.JspSpiUtil;
import com.intellij.psi.util.PropertyUtil;
import com.intellij.psi.xml.XmlAttribute;
@@ -62,8 +61,8 @@ public class MethodPropertyReference extends BasicAttributeValueReference {
}
} else if (psiElement instanceof PsiClass) {
return (PsiClass)psiElement;
- } else if (psiElement instanceof JspImplicitVariable) {
- final PsiType type=((JspImplicitVariable)psiElement).getType();
+ } else if (psiElement instanceof PsiVariable) {
+ final PsiType type=((PsiVariable)psiElement).getType();
if (type instanceof PsiClassType) {
return ((PsiClassType)type).resolve();
}
diff --git a/java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerDialog.java b/java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerDialog.java
index 7bca3c07b4c0..80201559ef34 100644
--- a/java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerDialog.java
+++ b/java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerDialog.java
@@ -86,20 +86,23 @@ class AnonymousToInnerDialog extends DialogWrapper{
final String[] names;
String name = myAnonClass.getBaseClassReference().getReferenceName();
PsiType[] typeParameters = myAnonClass.getBaseClassReference().getTypeParameters();
- if (typeParameters.length > 0) {
- names = new String[]{StringUtil.join(typeParameters, new Function<PsiType, String>() {
- public String fun(PsiType psiType) {
- PsiType type = psiType;
- if (psiType instanceof PsiClassType) {
- type = TypeConversionUtil.erasure(psiType);
- }
- if (type == null || type.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)) return "";
- if (type instanceof PsiArrayType) {
- type = type.getDeepComponentType();
- }
- return StringUtil.getShortName(type.getPresentableText());
+
+ final String typeParamsList = StringUtil.join(typeParameters, new Function<PsiType, String>() {
+ public String fun(PsiType psiType) {
+ PsiType type = psiType;
+ if (psiType instanceof PsiClassType) {
+ type = TypeConversionUtil.erasure(psiType);
}
- }, "") + name, "My" + name};
+ if (type == null || type.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)) return "";
+ if (type instanceof PsiArrayType) {
+ type = type.getDeepComponentType();
+ }
+ return StringUtil.getShortName(type.getPresentableText());
+ }
+ }, "") + name;
+
+ if (!typeParamsList.equals(name)) {
+ names = new String[]{typeParamsList, "My" + name};
} else {
names = new String[]{"My" + name};
}
diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
index 75544f9d8ab9..ce52274140bb 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.ChangeContextUtil;
import com.intellij.codeInsight.ExceptionUtil;
import com.intellij.codeInsight.NullableNotNullManager;
import com.intellij.codeInsight.daemon.impl.analysis.JavaHighlightUtil;
+import com.intellij.codeInsight.daemon.impl.quickfix.AnonymousTargetClassPreselectionUtil;
import com.intellij.codeInsight.highlighting.HighlightManager;
import com.intellij.codeInsight.intention.impl.AddNullableAnnotationFix;
import com.intellij.codeInsight.navigation.NavigationUtil;
@@ -1133,6 +1134,7 @@ public class ExtractMethodProcessor implements MatchProvider {
final PsiElementProcessor<PsiClass> processor = new PsiElementProcessor<PsiClass>() {
@Override
public boolean execute(@NotNull PsiClass selectedClass) {
+ AnonymousTargetClassPreselectionUtil.rememberSelection(selectedClass, myTargetClass);
final List<PsiVariable> array = classes.get(selectedClass);
myNeedChangeContext = myTargetClass != selectedClass;
myTargetClass = selectedClass;
@@ -1184,7 +1186,9 @@ public class ExtractMethodProcessor implements MatchProvider {
if (classes.size() > 1) {
final PsiClass[] psiClasses = classes.keySet().toArray(new PsiClass[classes.size()]);
- NavigationUtil.getPsiElementPopup(psiClasses, new PsiClassListCellRenderer(), "Choose Destination Class", processor).showInBestPositionFor(myEditor);
+ final PsiClass preselection = AnonymousTargetClassPreselectionUtil.getPreselection(classes.keySet(), psiClasses[0]);
+ NavigationUtil.getPsiElementPopup(psiClasses, new PsiClassListCellRenderer(), "Choose Destination Class", processor, preselection)
+ .showInBestPositionFor(myEditor);
return true;
}
}
diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java
index a751acea42df..75473959ddcc 100644
--- a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java
@@ -27,6 +27,7 @@ package com.intellij.refactoring.introduceField;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.ChangeContextUtil;
import com.intellij.codeInsight.TestFrameworks;
+import com.intellij.codeInsight.daemon.impl.quickfix.AnonymousTargetClassPreselectionUtil;
import com.intellij.codeInsight.highlighting.HighlightManager;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.codeInsight.navigation.NavigationUtil;
@@ -129,18 +130,13 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
return !convertExpressionToField(selectedExpr, editor, file, project, tempType);
}
else {
- PsiClass selection = null;
- for (PsiClass psiClass : classes) {
- if (!(psiClass instanceof PsiAnonymousClass)) {
- selection = psiClass;
- break;
- }
- }
+ PsiClass selection = AnonymousTargetClassPreselectionUtil.getPreselection(classes, myParentClass);
NavigationUtil.getPsiElementPopup(classes.toArray(new PsiClass[classes.size()]), new PsiClassListCellRenderer(),
"Choose class to introduce " + (myIsConstant ? "constant" : "field"),
new PsiElementProcessor<PsiClass>() {
@Override
public boolean execute(@NotNull PsiClass aClass) {
+ AnonymousTargetClassPreselectionUtil.rememberSelection(aClass, myParentClass);
myParentClass = aClass;
convertExpressionToField(selectedExpr, editor, file, project, tempType);
return false;
diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java
index 5b5c39fb10a8..0b31eedf8be0 100644
--- a/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java
@@ -18,6 +18,7 @@ package com.intellij.refactoring.introduceField;
import com.intellij.codeInsight.ChangeContextUtil;
import com.intellij.codeInsight.CodeInsightUtil;
import com.intellij.codeInsight.TestFrameworks;
+import com.intellij.codeInsight.daemon.impl.quickfix.AnonymousTargetClassPreselectionUtil;
import com.intellij.codeInsight.navigation.NavigationUtil;
import com.intellij.ide.util.PsiClassListCellRenderer;
import com.intellij.openapi.application.ApplicationManager;
@@ -66,7 +67,7 @@ public abstract class LocalToFieldHandler {
public boolean convertLocalToField(final PsiLocalVariable local, final Editor editor) {
boolean tempIsStatic = myIsConstant;
PsiElement parent = local.getParent();
- List<PsiClass> classes = new ArrayList<PsiClass>();
+ final List<PsiClass> classes = new ArrayList<PsiClass>();
while (parent != null && parent.getContainingFile() != null) {
if (parent instanceof PsiClass && !(myIsConstant && parent instanceof PsiAnonymousClass)) {
classes.add((PsiClass)parent);
@@ -90,13 +91,16 @@ public abstract class LocalToFieldHandler {
if (convertLocalToField(local, classes.get(getChosenClassIndex(classes)), editor, tempIsStatic)) return false;
} else {
final boolean isStatic = tempIsStatic;
+ final PsiClass firstClass = classes.get(0);
+ final PsiClass preselection = AnonymousTargetClassPreselectionUtil.getPreselection(classes, firstClass);
NavigationUtil.getPsiElementPopup(classes.toArray(new PsiClass[classes.size()]), new PsiClassListCellRenderer(), "Choose class to introduce " + (myIsConstant ? "constant" : "field"), new PsiElementProcessor<PsiClass>() {
@Override
public boolean execute(@NotNull PsiClass aClass) {
+ AnonymousTargetClassPreselectionUtil.rememberSelection(aClass, aClass);
convertLocalToField(local, aClass, editor, isStatic);
return false;
}
- }).showInBestPositionFor(editor);
+ }, preselection).showInBestPositionFor(editor);
}
return true;
diff --git a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java
index c410d763dac1..f09da834c348 100644
--- a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMethodProcessor.java
@@ -210,10 +210,16 @@ public class RenameJavaMethodProcessor extends RenameJavaMemberProcessor {
if (element instanceof PsiReferenceExpression) {
if (((PsiReferenceExpression)element).resolve() == methodToRename) {
final PsiElement parent = element.getParent();
- LOG.assertTrue(parent instanceof PsiMethodCallExpression, parent.getText());
- final PsiMethodCallExpression copy = (PsiMethodCallExpression)JavaPsiFacade.getElementFactory(element.getProject())
- .createExpressionFromText(parent.getText(), element);
- final PsiReferenceExpression expression = (PsiReferenceExpression)processRef(copy.getMethodExpression(), newName);
+ final PsiReferenceExpression copyRef;
+ if (parent instanceof PsiMethodCallExpression) {
+ final PsiMethodCallExpression copy = (PsiMethodCallExpression)JavaPsiFacade.getElementFactory(element.getProject())
+ .createExpressionFromText(parent.getText(), element);
+ copyRef = copy.getMethodExpression();
+ } else {
+ LOG.assertTrue(element instanceof PsiMethodReferenceExpression, element.getText());
+ copyRef = (PsiReferenceExpression)element.copy();
+ }
+ final PsiReferenceExpression expression = (PsiReferenceExpression)processRef(copyRef, newName);
if (expression == null) continue;
final JavaResolveResult resolveResult = expression.advancedResolve(true);
final PsiMember resolveResultElement = (PsiMember)resolveResult.getElement();
diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java
index f2ac34e8aed0..ca01331d3e94 100644
--- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java
+++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java
@@ -617,7 +617,7 @@ public class RefactoringUtil {
Project project = expr.getProject();
String[] suggestedNames =
JavaCodeStyleManager.getInstance(project).suggestVariableName(VariableKind.LOCAL_VARIABLE, null, expr, null).names;
- final String prefix = suggestedNames[0];
+ final String prefix = suggestedNames.length > 0 ? suggestedNames[0] : "var";
final String id = JavaCodeStyleManager.getInstance(project).suggestUniqueVariableName(prefix, context, true);
PsiElementFactory factory = JavaPsiFacade.getInstance(expr.getProject()).getElementFactory();
diff --git a/java/java-impl/src/com/intellij/testIntegration/createTest/MissedTestsDialog.java b/java/java-impl/src/com/intellij/testIntegration/createTest/MissedTestsDialog.java
index b34d28e3f6f4..ee8bcf0d1c1c 100644
--- a/java/java-impl/src/com/intellij/testIntegration/createTest/MissedTestsDialog.java
+++ b/java/java-impl/src/com/intellij/testIntegration/createTest/MissedTestsDialog.java
@@ -20,19 +20,15 @@ import com.intellij.codeInsight.template.Template;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.psi.JavaPsiFacade;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiMember;
-import com.intellij.psi.PsiMethod;
-import com.intellij.refactoring.ui.MemberSelectionPanel;
+import com.intellij.psi.*;
import com.intellij.refactoring.ui.MemberSelectionTable;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.testIntegration.TestFramework;
import com.intellij.testIntegration.TestIntegrationUtils;
import com.intellij.ui.ScrollPaneFactory;
-import com.intellij.ui.SeparatorFactory;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.util.Function;
+import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.Nullable;
@@ -40,8 +36,10 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
public class MissedTestsDialog extends DialogWrapper {
private final PsiClass mySourceClass;
@@ -85,9 +83,7 @@ public class MissedTestsDialog extends DialogWrapper {
private void disableMethodsWithTests(List<MemberInfo> info) {
final Set<String> existingNames = new HashSet<String>();
- final Template template = TestIntegrationUtils
- .createTestMethodTemplate(TestIntegrationUtils.MethodKind.TEST, myDescriptor, myTestClass, null, true, existingNames);
- final String prefix = JavaPsiFacade.getElementFactory(myTestClass.getProject()).createMethodFromText(template.getTemplateText(), myTestClass).getName();
+ final String prefix = getTestPrefix(existingNames);
existingNames.addAll(ContainerUtil.map(myTestClass.getMethods(), new Function<PsiMethod, String>() {
@Override
@@ -103,6 +99,16 @@ public class MissedTestsDialog extends DialogWrapper {
}
}
+ private String getTestPrefix(Set<String> existingNames) {
+ final Template template = TestIntegrationUtils.createTestMethodTemplate(TestIntegrationUtils.MethodKind.TEST, myDescriptor, myTestClass, null, true, existingNames);
+ try {
+ return JavaPsiFacade.getElementFactory(myTestClass.getProject()).createMethodFromText(template.getTemplateText(), myTestClass).getName();
+ }
+ catch (IncorrectOperationException e) {
+ return "";
+ }
+ }
+
private void updateMethodsTable() {
List<MemberInfo> infos = TestIntegrationUtils.extractClassMethods(mySourceClass, myIncludeInheritedCb.isSelected());
diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java b/java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java
index 445a8aab14a2..93b9737bdfe3 100644
--- a/java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java
+++ b/java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java
@@ -70,7 +70,8 @@ public class JavaUsageTypeProvider implements UsageTypeProviderEx {
return UsageType.RECURSION;
}
if (qualifier != null && !(qualifier instanceof PsiThisExpression) && calledMethod != null) {
- if (haveCommonSuperMethod(containerMethod, calledMethod)) {
+ if (Comparing.equal(containerMethod.getName(), calledMethod.getName()) &&
+ haveCommonSuperMethod(containerMethod, calledMethod)) {
boolean parametersDelegated = parametersDelegated(containerMethod, callExpression);
if (qualifier instanceof PsiSuperExpression) {