update copyright
[fedora-idea.git] / java / java-impl / src / com / intellij / codeEditor / printing / HyperlinksToClassesOption.java
blob0bd16a677339e88f5b9aec90d48c411cf130746a
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.
18 * User: anna
19 * Date: 25-Jan-2008
21 package com.intellij.codeEditor.printing;
23 import com.intellij.openapi.fileTypes.FileType;
24 import com.intellij.openapi.fileTypes.StdFileTypes;
25 import com.intellij.openapi.options.ConfigurationException;
26 import com.intellij.psi.*;
27 import org.jetbrains.annotations.Nullable;
29 import javax.swing.*;
30 import java.util.Map;
31 import java.util.TreeMap;
33 public class HyperlinksToClassesOption implements PrintOption {
34 private JCheckBox myCbGenerateHyperlinksToClasses;
35 private boolean isGenerateHyperlinksToClasses = false;
37 public boolean isGenerateHyperlinksToClasses() {
38 return isGenerateHyperlinksToClasses;
41 public void setGenerateHyperlinksToClasses(boolean generateHyperlinksToClasses) {
42 isGenerateHyperlinksToClasses = generateHyperlinksToClasses;
45 public JComponent createComponent() {
46 myCbGenerateHyperlinksToClasses = new JCheckBox(CodeEditorBundle.message("export.to.html.generate.hyperlinks.checkbox"), isGenerateHyperlinksToClasses);
47 return myCbGenerateHyperlinksToClasses;
50 public boolean isModified() {
51 return myCbGenerateHyperlinksToClasses.isSelected() != isGenerateHyperlinksToClasses;
54 public void apply() throws ConfigurationException {
55 isGenerateHyperlinksToClasses = myCbGenerateHyperlinksToClasses.isSelected();
58 public void reset() {
59 myCbGenerateHyperlinksToClasses.setSelected(isGenerateHyperlinksToClasses);
62 public void disposeUIResources() {
63 myCbGenerateHyperlinksToClasses = null;
66 @Nullable
67 public TreeMap<Integer, PsiReference> collectReferences(PsiFile psiFile, Map<PsiFile, PsiFile> filesMap) {
68 if (isGenerateHyperlinksToClasses()) {
69 FileType fileType = psiFile.getFileType();
70 if(StdFileTypes.JAVA == fileType || StdFileTypes.JSP == fileType) {
71 final TreeMap<Integer, PsiReference> refMap = new TreeMap<Integer, PsiReference>();
72 findClassReferences(psiFile, refMap, filesMap, psiFile);
73 return refMap;
76 return null;
80 private static void findClassReferences(PsiElement psiElement, TreeMap<Integer, PsiReference> refMap, Map<PsiFile, PsiFile> filesMap, PsiFile psiFile) {
81 PsiReference ref = psiElement.getReference();
82 if(ref instanceof PsiJavaCodeReferenceElement) {
83 PsiElement refElement = ref.resolve();
84 if(refElement instanceof PsiClass) {
85 PsiFile containingFile = refElement.getContainingFile();
86 if(!containingFile.equals(psiFile) && filesMap.get(containingFile) != null) {
87 refMap.put(psiElement.getTextRange().getStartOffset(), ref);
89 return;
92 PsiElement[] children = psiElement.getChildren();
93 for (PsiElement aChildren : children) {
94 findClassReferences(aChildren, refMap, filesMap, psiFile);