update copyright
[fedora-idea.git] / RegExpSupport / src / org / intellij / lang / regexp / RegExpDocumentationProvider.java
blob1106b4805b0858fa75cd3c11acdca1e6cab888d3
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 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;
28 /**
29 * Created by IntelliJ IDEA.
30 * User: vnikolaenko
31 * Date: 17.09.2008
32 * Time: 19:24:29
33 * To change this template use File | Settings | File Templates.
35 public class RegExpDocumentationProvider extends QuickDocumentationProvider {
36 @Override
37 @Nullable
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();
42 if (node != null) {
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];
48 } else {
49 return "Property block stands for " + "" + stringArray[1];
55 return null;
58 @Override
59 public PsiElement getDocumentationElementForLookupItem(PsiManager psiManager, Object object, PsiElement element) {
61 if (element instanceof RegExpProperty) {
62 final String s;
63 if (object instanceof PresentableLookupValue) {
64 s = ((PresentableLookupValue)object).getPresentation();
65 } else if (object instanceof String) {
66 s = (String)object;
67 } else {
68 return null;
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);
83 } else {
84 return f.findClass("java.util.regex.Pattern", GlobalSearchScope.allScope(project));
88 return super.getDocumentationElementForLookupItem(psiManager, object, element);
91 @Nullable
92 public String getQuickNavigateInfo(PsiElement element) {
93 if (element instanceof RegExpGroup) {
94 return "Capturing Group: " + ((RegExpElement)element).getUnescapedText();
95 } else {
96 return null;