update copyright
[fedora-idea.git] / java / java-impl / src / com / intellij / psi / impl / source / tree / JavaDocElementType.java
blobfc7ea27a34598c9912297d9d7462f471927a76d4
1 /*
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 {
32 //chameleon
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);
49 @Override
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);
65 @Override
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);
83 lexer.start(buffer);
84 if(lexer.getTokenType() != DOC_COMMENT) return false;
85 lexer.advance();
86 if(lexer.getTokenType() != null) return false;
87 return true;