add @sample known tag; handle @constructor tag in findKDoc()

This commit is contained in:
Dmitry Jemerov
2015-02-06 16:58:36 +01:00
parent 70cf3e9c60
commit fdfb843fdc
4 changed files with 29 additions and 12 deletions
@@ -22,6 +22,8 @@ import org.jetbrains.kotlin.resolve.source.PsiSourceElement
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag
fun findKDoc(declaration: DeclarationDescriptor): KDocTag? {
if (declaration is DeclarationDescriptorWithSource) {
@@ -29,6 +31,13 @@ fun findKDoc(declaration: DeclarationDescriptor): KDocTag? {
if (psiDeclaration is JetDeclaration) {
val kdoc = psiDeclaration.getDocComment()
if (kdoc != null) {
if (declaration is ConstructorDescriptor) {
// ConstructorDescriptor resolves to the same JetDeclaration
val constructorSection = kdoc.findSectionByTag(KDocKnownTag.CONSTRUCTOR)
if (constructorSection != null) {
return constructorSection
}
}
return kdoc.getDefaultSection()
}
}
@@ -27,7 +27,8 @@ public enum KDocKnownTag {
SEE(true, false),
SINCE(false, false),
CONSTRUCTOR(false, true),
PROPERTY(true, true);
PROPERTY(true, true),
SAMPLE(true, false);
private final boolean takesReference;
private final boolean startsSection;
@@ -14,18 +14,17 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.kdoc.psi.api;
package org.jetbrains.kotlin.kdoc.psi.api
import com.intellij.psi.PsiComment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.kdoc.psi.impl.KDocSection;
import org.jetbrains.kotlin.psi.JetDeclaration;
import com.intellij.psi.PsiComment
import org.jetbrains.kotlin.kdoc.psi.impl.KDocSection
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag
// Don't implement JetElement (or it will be treated as statement)
public interface KDoc extends PsiComment {
@Nullable
JetDeclaration getOwner();
@NotNull
KDocSection getDefaultSection();
public trait KDoc : PsiComment {
public fun getOwner(): JetDeclaration?
public fun getDefaultSection(): KDocSection
public fun findSectionByName(name: String): KDocSection?
public fun findSectionByTag(tag: KDocKnownTag): KDocSection?
}
@@ -26,6 +26,8 @@ import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.psi.psiUtil.getChildOfType
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag
public class KDocImpl(buffer: CharSequence?) : LazyParseablePsiElement(KDocTokens.KDOC, buffer), KDoc {
@@ -38,4 +40,10 @@ public class KDocImpl(buffer: CharSequence?) : LazyParseablePsiElement(KDocToken
override fun getOwner(): JetDeclaration? = getParentOfType<JetDeclaration>(true)
override fun getDefaultSection(): KDocSection = getChildOfType<KDocSection>()!!
override fun findSectionByName(name: String): KDocSection? =
getChildrenOfType<KDocSection>().firstOrNull { it.getName() == name }
override fun findSectionByTag(tag: KDocKnownTag): KDocSection? =
findSectionByName(tag.name().toLowerCase())
}