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 5684bf8b0765..7e7e0955b560 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-2009 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -207,7 +207,15 @@ public class JavaDocCompletionContributor extends CompletionContributor { final PsiElement position = parameters.getPosition(); final PsiDocComment comment = PsiTreeUtil.getParentOfType(position, PsiDocComment.class); assert comment != null; - final PsiElement parent = comment.getContext(); + PsiElement parent = comment.getContext(); + if (parent instanceof PsiJavaFile) { + final PsiJavaFile file = (PsiJavaFile)parent; + if (PsiPackage.PACKAGE_INFO_FILE.equals(file.getName())) { + final String packageName = file.getPackageName(); + parent = JavaPsiFacade.getInstance(position.getProject()).findPackage(packageName); + } + } + final boolean isInline = position.getContext() instanceof PsiInlineDocTag; for (JavadocTagInfo info : JavadocManager.SERVICE.getInstance(position.getProject()).getTagInfos(parent)) { diff --git a/java/java-impl/src/com/intellij/psi/impl/source/javadoc/JavadocManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/javadoc/JavadocManagerImpl.java index 5c4ef0dfb9bc..939d7f707c2e 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/javadoc/JavadocManagerImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/javadoc/JavadocManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,10 +19,7 @@ import com.intellij.codeInspection.SuppressionUtil; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.pom.java.LanguageLevel; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiField; -import com.intellij.psi.PsiMethod; +import com.intellij.psi.*; import com.intellij.psi.javadoc.JavadocManager; import com.intellij.psi.javadoc.JavadocTagInfo; import org.jetbrains.annotations.NotNull; @@ -41,12 +38,12 @@ public class JavadocManagerImpl implements JavadocManager { public JavadocManagerImpl(Project project) { myInfos = new ArrayList(); - myInfos.add(new SimpleDocTagInfo("author", PsiClass.class, false, LanguageLevel.JDK_1_3)); + myInfos.add(new SimpleDocTagInfo("author", PsiClass.class, PsiPackage.class, LanguageLevel.JDK_1_3)); myInfos.add(new SimpleDocTagInfo("deprecated", PsiElement.class, false, LanguageLevel.JDK_1_3)); myInfos.add(new SimpleDocTagInfo("serialData", PsiMethod.class, false, LanguageLevel.JDK_1_3)); myInfos.add(new SimpleDocTagInfo("serialField", PsiField.class, false, LanguageLevel.JDK_1_3)); - myInfos.add(new SimpleDocTagInfo("since", PsiElement.class, false, LanguageLevel.JDK_1_3)); - myInfos.add(new SimpleDocTagInfo("version", PsiClass.class, false, LanguageLevel.JDK_1_3)); + myInfos.add(new SimpleDocTagInfo("since", PsiElement.class, PsiPackage.class, LanguageLevel.JDK_1_3)); + myInfos.add(new SimpleDocTagInfo("version", PsiClass.class, PsiPackage.class, LanguageLevel.JDK_1_3)); myInfos.add(new SimpleDocTagInfo("docRoot", PsiElement.class, true, LanguageLevel.JDK_1_3)); myInfos.add(new SimpleDocTagInfo("inheritDoc", PsiElement.class, true, LanguageLevel.JDK_1_4)); diff --git a/java/java-impl/src/com/intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java b/java/java-impl/src/com/intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java index 70b699dda2fc..d16f4d8be4a7 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,16 +30,26 @@ import org.jetbrains.annotations.NonNls; class SimpleDocTagInfo implements JavadocTagInfo { private final String myName; private final Class myContext; + private final Class myAdditionalContext; private final boolean myInline; private final LanguageLevel myLanguageLevel; public SimpleDocTagInfo(@NonNls String name, Class context, boolean isInline, LanguageLevel level) { myName = name; myContext = context; + myAdditionalContext = null; myInline = isInline; myLanguageLevel = level; } + public SimpleDocTagInfo(@NonNls String name, Class context, Class additionalContext, LanguageLevel level) { + myName = name; + myContext = context; + myAdditionalContext = additionalContext; + myInline = false; + myLanguageLevel = level; + } + @Override public String getName() { return myName; @@ -51,7 +61,7 @@ class SimpleDocTagInfo implements JavadocTagInfo { return false; } - return myContext.isInstance(element); + return myContext.isInstance(element) || (myAdditionalContext != null && myAdditionalContext.isInstance(element)); } @Override diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/package-info.java b/java/java-tests/testData/codeInsight/completion/javadoc/package-info.java new file mode 100644 index 000000000000..fd68c5085519 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/javadoc/package-info.java @@ -0,0 +1,4 @@ +/** + * @ + */ +package p; \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.groovy index 2a1aef8aae38..c6c47d92e54f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.groovy @@ -38,6 +38,12 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase { myFixture.enableInspections(new JavaDocLocalInspection()); } + public void testNamesInPackage() throws Exception { + myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("package-info.java", "p/package-info.java")); + complete(); + assertStringItems("author", 'author ' + SystemProperties.getUserName(), "deprecated", "see", "since", "version") + } + public void testNamesInClass() throws Exception { configureByFile("ClassTagName.java"); assertStringItems("author", 'author ' + SystemProperties.getUserName(), "deprecated", "param", "see", "serial", "since", "version");