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.
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
;
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();
59 myCbGenerateHyperlinksToClasses
.setSelected(isGenerateHyperlinksToClasses
);
62 public void disposeUIResources() {
63 myCbGenerateHyperlinksToClasses
= null;
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
);
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
);
92 PsiElement
[] children
= psiElement
.getChildren();
93 for (PsiElement aChildren
: children
) {
94 findClassReferences(aChildren
, refMap
, filesMap
, psiFile
);