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 org
.intellij
.lang
.regexp
;
18 import com
.intellij
.lang
.ASTNode
;
19 import com
.intellij
.lang
.documentation
.QuickDocumentationProvider
;
20 import com
.intellij
.psi
.PsiElement
;
21 import com
.intellij
.psi
.PsiManager
;
22 import org
.intellij
.lang
.regexp
.psi
.RegExpElement
;
23 import org
.intellij
.lang
.regexp
.psi
.RegExpGroup
;
24 import org
.intellij
.lang
.regexp
.psi
.RegExpProperty
;
25 import org
.intellij
.lang
.regexp
.psi
.impl
.RegExpPropertyImpl
;
26 import org
.jetbrains
.annotations
.Nullable
;
29 * Created by IntelliJ IDEA.
33 * To change this template use File | Settings | File Templates.
35 public class RegExpDocumentationProvider
extends QuickDocumentationProvider
{
38 public String
generateDoc(PsiElement element
, PsiElement originalElement
) {
39 if (element
instanceof RegExpProperty
) {
40 final RegExpProperty prop
= (RegExpProperty
)element
;
41 final ASTNode node
= prop
.getCategoryNode();
43 final String elementName
= node
.getText();
44 for (String
[] stringArray
: RegExpPropertyImpl
.PROPERTY_NAMES
) {
45 if (stringArray
[0].equals(elementName
)) {
46 if (prop
.isNegated()) {
47 return "Property block stands for characters not matching " + stringArray
[1];
49 return "Property block stands for " + "" + stringArray
[1];
59 public PsiElement
getDocumentationElementForLookupItem(PsiManager psiManager
, Object object
, PsiElement element
) {
61 if (element instanceof RegExpProperty) {
63 if (object instanceof PresentableLookupValue) {
64 s = ((PresentableLookupValue)object).getPresentation();
65 } else if (object instanceof String) {
70 final Project project = element.getProject();
71 final JavaPsiFacade f = JavaPsiFacade.getInstance(project);
72 if (s.startsWith("java")) {
73 final PsiClass charClass = f.findClass("java.lang.Character", GlobalSearchScope.allScope(project));
74 if (charClass != null) {
75 final PsiMethod[] methods = charClass.findMethodsByName("is" + s.substring("java".length()), false);
76 return methods.length > 0 ? methods[0] : null;
78 } else if (s.matches("In[\\p{Upper}_]+")) {
79 final PsiClass charClass = f.findClass("java.lang.Character.UnicodeBlock", GlobalSearchScope.allScope(project));
80 if (charClass != null) {
81 return charClass.findFieldByName(s.substring(2), false);
84 return f.findClass("java.util.regex.Pattern", GlobalSearchScope.allScope(project));
88 return super.getDocumentationElementForLookupItem(psiManager
, object
, element
);
92 public String
getQuickNavigateInfo(PsiElement element
) {
93 if (element
instanceof RegExpGroup
) {
94 return "Capturing Group: " + ((RegExpElement
)element
).getUnescapedText();