diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/CastingLookupElementDecorator.java b/java/java-impl/src/com/intellij/codeInsight/completion/CastingLookupElementDecorator.java index 85ddb7183e68..5b9b54a039ef 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/CastingLookupElementDecorator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/CastingLookupElementDecorator.java @@ -17,6 +17,7 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.lookup.*; import com.intellij.openapi.editor.Editor; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiType; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; @@ -39,7 +40,7 @@ public class CastingLookupElementDecorator extends LookupElementDecorator> DYNAMIC_TYPE_EVALUATOR = Key.create("DYNAMIC_TYPE_EVALUATOR"); @@ -909,7 +910,7 @@ public class JavaCompletionUtil { final PsiExpression newRef = JavaPsiFacade.getElementFactory(project).createExpressionFromText(newText, refExpr); ((PsiReferenceExpression)newRef).processVariants(processor); - final LookupElement castItem = PsiTypeLookupItem.createLookupItem(castTo); + final LookupElement castItem = PsiTypeLookupItem.createLookupItem(castTo, refExpr); for (CompletionElement completionElement : processor.getResults()) { final LookupElement item = createLookupElement(completionElement, castTo); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java index 6dcfb2c8a4ef..381675d0604f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java @@ -23,10 +23,7 @@ import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pair; import com.intellij.patterns.ElementPattern; -import static com.intellij.patterns.PlatformPatterns.psiElement; import com.intellij.patterns.PsiJavaPatterns; -import static com.intellij.patterns.PsiJavaPatterns.psiMethod; -import static com.intellij.patterns.StandardPatterns.*; import com.intellij.psi.*; import com.intellij.psi.filters.ElementExtractorFilter; import com.intellij.psi.filters.ElementFilter; @@ -59,6 +56,10 @@ import org.jetbrains.annotations.Nullable; import java.util.*; +import static com.intellij.patterns.PlatformPatterns.psiElement; +import static com.intellij.patterns.PsiJavaPatterns.psiMethod; +import static com.intellij.patterns.StandardPatterns.*; + /** * @author peter */ @@ -277,7 +278,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor { if (tryBlock == null) return; for (final PsiClassType type : ExceptionUtil.getThrownExceptions(tryBlock.getStatements())) { - result.addElement(TailTypeDecorator.withTail(PsiTypeLookupItem.createLookupItem(type).setInsertHandler(new DefaultInsertHandler()), TailType.SPACE)); + result.addElement(TailTypeDecorator.withTail(PsiTypeLookupItem.createLookupItem(type, tryBlock).setInsertHandler(new DefaultInsertHandler()), TailType.SPACE)); } } }); @@ -322,7 +323,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor { .getSubstitutionForTypeParameter(targetParameter, paramSubstitution, argSubstitution, false, PsiUtil.getLanguageLevel(context)); if (substitution != null && substitution != PsiType.NULL) { - final LookupItem item = PsiTypeLookupItem.createLookupItem(substitution); + final LookupItem item = PsiTypeLookupItem.createLookupItem(substitution, context); resultSet.addElement(TailTypeDecorator.withTail(item.setInsertHandler(new DefaultInsertHandler()), tail)); } } @@ -378,7 +379,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor { for (final PsiArrayType type : expectedArrayTypes) { ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { - final LookupItem item = PsiTypeLookupItem.createLookupItem(JavaCompletionUtil.eliminateWildcards(type)); + final LookupItem item = PsiTypeLookupItem.createLookupItem(JavaCompletionUtil.eliminateWildcards(type), identifierCopy); item.setAttribute(LookupItem.DONT_CHECK_FOR_INNERS, ""); if (item.getObject() instanceof PsiClass) { JavaCompletionUtil.setShowFQN(item); @@ -425,7 +426,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor { substitutor = substitutor.put(typeParameter, wildcard); } final PsiElementFactory factory = JavaPsiFacade.getElementFactory(psiClass.getProject()); - return PsiTypeLookupItem.createLookupItem(factory.createType(psiClass, substitutor)); + return PsiTypeLookupItem.createLookupItem(factory.createType(psiClass, substitutor), psiClass); } } } @@ -565,7 +566,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor { return; } - final LookupItem item = PsiTypeLookupItem.createLookupItem(JavaCompletionUtil.eliminateWildcards(type)); + final LookupItem item = PsiTypeLookupItem.createLookupItem(JavaCompletionUtil.eliminateWildcards(type), parameters.getPosition()); item.setAttribute(LookupItem.DONT_CHECK_FOR_INNERS, ""); JavaCompletionUtil.setShowFQN(item); item.setAttribute(LookupItem.NEW_OBJECT_ATTR, ""); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/SmartCastProvider.java b/java/java-impl/src/com/intellij/codeInsight/completion/SmartCastProvider.java index 67fb7cb70360..eb9168234cf5 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/SmartCastProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/SmartCastProvider.java @@ -38,7 +38,7 @@ class SmartCastProvider extends CompletionProvider { final boolean overwrite = INSIDE_TYPECAST_TYPE.accepts(parameters.getOriginalPosition()); final LookupElement item = AutoCompletionPolicy.ALWAYS_AUTOCOMPLETE.applyPolicy(new LookupElementDecorator( - PsiTypeLookupItem.createLookupItem(type.getDefaultType())) { + PsiTypeLookupItem.createLookupItem(type.getDefaultType(), parameters.getPosition())) { @Override public void handleInsert(InsertionContext context) { diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithCastSurrounder.java b/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithCastSurrounder.java index 46832817d472..55e893884f5a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithCastSurrounder.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithCastSurrounder.java @@ -57,7 +57,7 @@ class JavaWithCastSurrounder extends JavaExpressionSurrounder { Set itemSet = new LinkedHashSet(); for (PsiType type : suggestedTypes) { - itemSet.add(PsiTypeLookupItem.createLookupItem(type)); + itemSet.add(PsiTypeLookupItem.createLookupItem(type, null)); } final LookupElement[] lookupItems = itemSet.toArray(new LookupElement[itemSet.size()]); @@ -87,4 +87,4 @@ class JavaWithCastSurrounder extends JavaExpressionSurrounder { public String getTemplateDescription() { return CodeInsightBundle.message("surround.with.cast.template"); } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/TypeExpression.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/TypeExpression.java index 5d280843a968..f6bf1f160a1f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/TypeExpression.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/TypeExpression.java @@ -64,7 +64,7 @@ public class TypeExpression extends Expression { for (final SmartTypePointer item : myItems) { final PsiType type = item.getType(); if (type != null) { - result.add(PsiTypeLookupItem.createLookupItem(type)); + result.add(PsiTypeLookupItem.createLookupItem(type, null)); } } return result.toArray(new LookupElement[result.size()]); diff --git a/java/java-impl/src/com/intellij/codeInsight/lookup/LookupItemUtil.java b/java/java-impl/src/com/intellij/codeInsight/lookup/LookupItemUtil.java index 66fdcca2462f..4e53c23a2c6d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/lookup/LookupItemUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/lookup/LookupItemUtil.java @@ -106,7 +106,7 @@ public class LookupItemUtil{ return new ExpressionLookupItem((PsiExpression) object); } if (object instanceof PsiType) { - return PsiTypeLookupItem.createLookupItem((PsiType)object); + return PsiTypeLookupItem.createLookupItem((PsiType)object, null); } String s = null; diff --git a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java index 2f74219b6af6..a6536b54f5cf 100644 --- a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java +++ b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java @@ -15,9 +15,10 @@ */ package com.intellij.codeInsight.lookup; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.NonNls; import com.intellij.psi.*; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author peter @@ -40,11 +41,11 @@ public class PsiTypeLookupItem extends LookupItem { } public int getBracketsCount() { - final Integer integer = (Integer)getUserData(LookupItem.BRACKETS_COUNT_ATTR); + final Integer integer = (Integer)getUserData(BRACKETS_COUNT_ATTR); return integer == null ? 0 : integer; } - public static LookupItem createLookupItem(PsiType type) { + public static LookupItem createLookupItem(@NotNull PsiType type, @Nullable PsiElement context) { final PsiType original = type; int dim = 0; while (type instanceof PsiArrayType) { @@ -59,12 +60,30 @@ public class PsiTypeLookupItem extends LookupItem { final PsiSubstitutor substitutor = classResolveResult.getSubstitutor(); final String text = type.getCanonicalText(); String typeString = text; + String typeParams = ""; if (text.indexOf('<') > 0 && text.endsWith(">")) { typeString = text.substring(0, text.indexOf('<')); + typeParams = text.substring(text.indexOf('<')); } - String s = text.substring(typeString.lastIndexOf('.') + 1); - item = psiClass != null ? new PsiTypeLookupItem(psiClass, s) : new PsiTypeLookupItem(text, s); - item.setAttribute(LookupItem.SUBSTITUTOR, substitutor); + + String lookupString = text.substring(typeString.lastIndexOf('.') + 1); + if (psiClass != null) { + PsiClass resolved = + JavaPsiFacade.getInstance(psiClass.getProject()).getResolveHelper().resolveReferencedClass(psiClass.getName(), context); + if (!psiClass.getManager().areElementsEquivalent(resolved, psiClass)) { + // inner class name should be shown qualified if its not accessible by single name + PsiClass aClass = psiClass; + lookupString = ""; + while (aClass != null) { + lookupString = aClass.getName() + (lookupString == "" ? "" : ".") + lookupString; + aClass = aClass.getContainingClass(); + } + lookupString += typeParams; + } + } + + item = new PsiTypeLookupItem(psiClass == null ? text : psiClass, lookupString); + item.setAttribute(SUBSTITUTOR, substitutor); } else { item = new LookupItem(type, type.getPresentableText()); @@ -75,11 +94,11 @@ public class PsiTypeLookupItem extends LookupItem { for (int i = 0; i < dim; i++) { tail.append("[]"); } - item.setAttribute(LookupItem.TAIL_TEXT_ATTR, " " + tail.toString()); - item.setAttribute(LookupItem.TAIL_TEXT_SMALL_ATTR, ""); - item.putUserData(LookupItem.BRACKETS_COUNT_ATTR, dim); + item.setAttribute(TAIL_TEXT_ATTR, " " + tail.toString()); + item.setAttribute(TAIL_TEXT_SMALL_ATTR, ""); + item.putUserData(BRACKETS_COUNT_ATTR, dim); } - item.setAttribute(LookupItem.TYPE, original); + item.setAttribute(TYPE, original); return item; } } diff --git a/java/java-impl/src/com/intellij/codeInsight/template/macro/SuggestVariableNameMacro.java b/java/java-impl/src/com/intellij/codeInsight/template/macro/SuggestVariableNameMacro.java index 10cbf9420e20..d69f80485084 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/macro/SuggestVariableNameMacro.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/macro/SuggestVariableNameMacro.java @@ -16,20 +16,19 @@ package com.intellij.codeInsight.template.macro; import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.lookup.LookupItem; import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.codeInsight.lookup.LookupItem; import com.intellij.codeInsight.template.*; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiVariable; +import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; import java.util.Arrays; import java.util.LinkedList; -import com.intellij.util.ArrayUtil; -import org.jetbrains.annotations.NotNull; - public class SuggestVariableNameMacro implements Macro { public String getName() { @@ -60,24 +59,24 @@ public class SuggestVariableNameMacro implements Macro { LookupItem[] items = new LookupItem[names.length]; for(int i = 0; i < names.length; i++) { String name = names[i]; - items[i] = new LookupItem(name, name); + items[i] = LookupItem.fromString(name); } return items; } - private String[] getNames (final ExpressionContext context) { + private static String[] getNames (final ExpressionContext context) { String[] names = ExpressionUtil.getNames(context); if (names == null || names.length == 0) return names; PsiFile file = PsiDocumentManager.getInstance(context.getProject()).getPsiFile(context.getEditor().getDocument()); PsiElement e = file.findElementAt(context.getStartOffset()); PsiVariable[] vars = MacroUtil.getVariablesVisibleAt(e, ""); - LinkedList namesList = new LinkedList(Arrays.asList(names)); + LinkedList namesList = new LinkedList(Arrays.asList(names)); for (PsiVariable var : vars) { if (e.equals(var.getNameIdentifier())) continue; namesList.remove(var.getName()); } - if (namesList.size() == 0) { + if (namesList.isEmpty()) { String name = names[0]; index: for (int j = 1; ; j++) { @@ -89,7 +88,7 @@ public class SuggestVariableNameMacro implements Macro { } } - return (String[])ArrayUtil.toStringArray(namesList); + return ArrayUtil.toStringArray(namesList); } } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionSortingTestCase.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionSortingTestCase.java index e3edc69a9ace..18fe48c5e674 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionSortingTestCase.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionSortingTestCase.java @@ -11,6 +11,7 @@ import com.intellij.codeInsight.lookup.impl.LookupImpl; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; import com.intellij.testFramework.TestDataPath; +import org.jetbrains.annotations.NonNls; import javax.swing.*; import java.util.ArrayList; @@ -45,12 +46,12 @@ public abstract class CompletionSortingTestCase extends LightCompletionTestCase protected abstract String getBasePath(); - protected void checkPreferredItems(final int selected, final String... expected) throws Exception { + protected void checkPreferredItems(final int selected, @NonNls final String... expected) throws Exception { invokeCompletion(getBasePath() + "/" + getTestName(false) + ".java"); assertPreferredItems(selected, expected); } - protected static void assertPreferredItems(final int selected, final String... expected) { + protected static void assertPreferredItems(final int selected, @NonNls final String... expected) { final LookupImpl lookup = getLookup(); final JList list = lookup.getList(); final List model = lookup.getItems(); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionOrderingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionOrderingTest.java index 7b18cd36880c..902b950b4f0a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionOrderingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionOrderingTest.java @@ -5,13 +5,10 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.lookup.impl.LookupImpl; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; import com.intellij.psi.statistics.StatisticsManager; -@SuppressWarnings({"ALL"}) public class SmartTypeCompletionOrderingTest extends CompletionSortingTestCase { - private static final String BASE_PATH = "/codeInsight/completion/smartTypeSorting"; + private static final String BASE_PATH = "/codeInsight/completion/smartTypeSorting"; public SmartTypeCompletionOrderingTest() { super(CompletionType.SMART); @@ -236,8 +233,4 @@ public class SmartTypeCompletionOrderingTest extends CompletionSortingTestCase { protected String getBasePath() { return BASE_PATH; } - - protected Sdk getTestProjectJdk() { - return JavaSdkImpl.getMockJdk15("java 1.5"); - } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index ecc839bea25d..f691ed92aac2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -65,7 +65,7 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.lookup.impl.LookupImpl"); private static final int MAX_PREFERRED_COUNT = 5; - private static final LookupItem EMPTY_LOOKUP_ITEM = new LookupItem("preselect", "preselect"); + private static final LookupItem EMPTY_LOOKUP_ITEM = LookupItem.fromString("preselect"); private final Project myProject; private final Editor myEditor; @@ -928,7 +928,7 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { Dimension preferredSize = getComponent().getPreferredSize(); setBounds(point.x,point.y,preferredSize.width,preferredSize.height); - HintManagerImpl.getInstanceImpl().adjustEditorHintPosition(this, myEditor, point); + HintManagerImpl.adjustEditorHintPosition(this, myEditor, point); } } diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java index 0a7b73f1d2b9..1487f0648369 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java @@ -305,7 +305,7 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro if (IdeaLogger.ourErrorsOccurred != null) { throw IdeaLogger.ourErrorsOccurred; } - assertTrue("Logger errors occurred in " + getFullName(), IdeaLogger.ourErrorsOccurred == null); + assertNull("Logger errors occurred in " + getFullName(), IdeaLogger.ourErrorsOccurred); } } finally { @@ -623,8 +623,8 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro private static void setTmpDir(String path) { System.setProperty("java.io.tmpdir", path); - Class ioFile = File.class; try { + Class ioFile = File.class; Field field = ioFile.getDeclaredField("tmpdir"); field.setAccessible(true); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/editor/template/expressions/ChooseTypeExpression.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/editor/template/expressions/ChooseTypeExpression.java index c732b59c038c..5d78bdff42f6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/editor/template/expressions/ChooseTypeExpression.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/editor/template/expressions/ChooseTypeExpression.java @@ -53,9 +53,9 @@ public class ChooseTypeExpression extends Expression { for (TypeConstraint constraint : constraints) { if (constraint instanceof TypeEquals) { - result.add(PsiTypeLookupItem.createLookupItem(constraint.getType())); + result.add(PsiTypeLookupItem.createLookupItem(constraint.getType(), null)); } else if (constraint instanceof SubtypeConstraint) { - result.add(PsiTypeLookupItem.createLookupItem(constraint.getDefaultType())); + result.add(PsiTypeLookupItem.createLookupItem(constraint.getDefaultType(), null)); } else if (constraint instanceof SupertypeConstraint) { processSupertypes(constraint.getType(), result); } @@ -72,7 +72,7 @@ public class ChooseTypeExpression extends Expression { if (unboxed != null && !unboxed.equals(text)) { result.add(LookupElementBuilder.create(unboxed).setBold()); } else { - result.add(PsiTypeLookupItem.createLookupItem(type)); + result.add(PsiTypeLookupItem.createLookupItem(type, null)); } PsiType[] superTypes = type.getSuperTypes(); for (PsiType superType : superTypes) {