2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com
.intellij
.psi
.impl
.source
.tree
;
18 import com
.intellij
.lang
.ASTNode
;
19 import com
.intellij
.lang
.StdLanguages
;
20 import com
.intellij
.lexer
.JavaLexer
;
21 import com
.intellij
.openapi
.project
.Project
;
22 import com
.intellij
.pom
.java
.LanguageLevel
;
23 import com
.intellij
.psi
.PsiManager
;
24 import com
.intellij
.psi
.impl
.source
.parsing
.JavaParsingContext
;
25 import com
.intellij
.psi
.tree
.IElementType
;
26 import com
.intellij
.psi
.tree
.ILazyParseableElementType
;
27 import com
.intellij
.psi
.tree
.IReparseableElementType
;
28 import com
.intellij
.psi
.tree
.java
.IJavaDocElementType
;
29 import com
.intellij
.util
.CharTable
;
31 public interface JavaDocElementType
{
33 IElementType DOC_TAG
= new IJavaDocElementType("DOC_TAG");
34 IElementType DOC_TAG_VALUE
= new IJavaDocElementType("DOC_TAG_VALUE");
35 IElementType DOC_INLINE_TAG
= new IJavaDocElementType("DOC_INLINE_TAG");
36 IElementType DOC_METHOD_OR_FIELD_REF
= new IJavaDocElementType("DOC_METHOD_OR_FIELD_REF");
37 IElementType DOC_PARAMETER_REF
= new IJavaDocElementType("DOC_PARAMETER_REF");
39 ILazyParseableElementType DOC_REFERENCE_HOLDER
= new ILazyParseableElementType("DOC_REFERENCE_HOLDER", StdLanguages
.JAVA
){
40 public ASTNode
parseContents(ASTNode chameleon
) {
41 final CharSequence chars
= chameleon
.getChars();
42 final PsiManager manager
= chameleon
.getTreeParent().getPsi().getManager();
43 final CharTable table
= SharedImplUtil
.findCharTableByTree(chameleon
);
44 //no language features from higher java language versions are present in javadoc
45 JavaParsingContext context
= new JavaParsingContext(table
, LanguageLevel
.JDK_1_3
);
46 return context
.getJavadocParsing().parseJavaDocReference(chars
, new JavaLexer(LanguageLevel
.JDK_1_3
), false, manager
);
50 public ASTNode
createNode(CharSequence text
) {
51 return new LazyParseablePsiElement(this, text
);
55 ILazyParseableElementType DOC_TYPE_HOLDER
= new ILazyParseableElementType("DOC_TYPE_HOLDER", StdLanguages
.JAVA
){
56 public ASTNode
parseContents(ASTNode chameleon
) {
57 final CharSequence chars
= chameleon
.getChars();
58 final PsiManager manager
= chameleon
.getTreeParent().getPsi().getManager();
59 final CharTable table
= SharedImplUtil
.findCharTableByTree(chameleon
);
60 //no language features from higher java language versions are present in javadoc
61 JavaParsingContext context
= new JavaParsingContext(table
, LanguageLevel
.JDK_1_3
);
62 return context
.getJavadocParsing().parseJavaDocReference(chars
, new JavaLexer(LanguageLevel
.JDK_1_3
), true, manager
);
66 public ASTNode
createNode(CharSequence text
) {
67 return new LazyParseablePsiElement(this, text
);
71 ILazyParseableElementType DOC_COMMENT
= new IReparseableElementType("DOC_COMMENT", StdLanguages
.JAVA
){
72 public ASTNode
parseContents(ASTNode chameleon
) {
73 final CharSequence chars
= chameleon
.getChars();
74 final PsiManager manager
= chameleon
.getTreeParent().getPsi().getManager();
75 //no higher java language level features are allowed in javadoc
76 final JavaParsingContext context
= new JavaParsingContext(SharedImplUtil
.findCharTableByTree(chameleon
), LanguageLevel
.JDK_1_3
);
77 return context
.getJavadocParsing().parseDocCommentText(manager
, chars
, 0, chars
.length());
80 public boolean isParsable(CharSequence buffer
, final Project project
) {
81 final JavaLexer lexer
= new JavaLexer(LanguageLevel
.JDK_1_5
);
84 if(lexer
.getTokenType() != DOC_COMMENT
) return false;
86 if(lexer
.getTokenType() != null) return false;