809f08beec5c7ae9e1353e4682aba64b9b28930c
[idea/community.git] / plugins / groovy / src / org / jetbrains / plugins / groovy / compiler / GroovyCompilerConfigurable.java
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.jetbrains.plugins.groovy.compiler;
18
19 import com.intellij.openapi.compiler.options.ExcludedEntriesConfigurable;
20 import com.intellij.openapi.compiler.options.ExcludesConfiguration;
21 import com.intellij.openapi.fileChooser.FileChooserDescriptor;
22 import com.intellij.openapi.module.Module;
23 import com.intellij.openapi.module.ModuleManager;
24 import com.intellij.openapi.options.Configurable;
25 import com.intellij.openapi.options.ConfigurationException;
26 import com.intellij.openapi.options.SearchableConfigurable;
27 import com.intellij.openapi.project.Project;
28 import com.intellij.openapi.roots.ModuleRootManager;
29 import com.intellij.openapi.roots.ProjectFileIndex;
30 import com.intellij.openapi.roots.ProjectRootManager;
31 import com.intellij.openapi.util.Comparing;
32 import com.intellij.openapi.vfs.VirtualFile;
33 import com.intellij.ui.components.JBCheckBox;
34 import com.intellij.util.Function;
35 import com.intellij.util.containers.ContainerUtil;
36 import org.jetbrains.annotations.Nls;
37 import org.jetbrains.annotations.NotNull;
38 import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
39
40 import javax.swing.*;
41 import java.util.List;
42
43 /**
44  * @author peter
45  */
46 public class GroovyCompilerConfigurable implements SearchableConfigurable, Configurable.NoScroll {
47   private JTextField myHeapSize;
48   private JPanel myMainPanel;
49   private JPanel myExcludesPanel;
50   private JBCheckBox myInvokeDynamicSupportCB;
51
52   private final ExcludedEntriesConfigurable myExcludes;
53   private final GroovyCompilerConfiguration myConfig;
54
55   public GroovyCompilerConfigurable(Project project) {
56     myConfig = GroovyCompilerConfiguration.getInstance(project);
57     myExcludes = createExcludedConfigurable(project);
58   }
59
60   public ExcludedEntriesConfigurable getExcludes() {
61     return myExcludes;
62   }
63
64   private ExcludedEntriesConfigurable createExcludedConfigurable(final Project project) {
65     final ExcludesConfiguration configuration = myConfig.getExcludeFromStubGeneration();
66     final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
67     final FileChooserDescriptor descriptor = new FileChooserDescriptor(true, true, false, false, false, true) {
68       @Override
69       public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) {
70         return super.isFileVisible(file, showHiddenFiles) && !index.isExcluded(file);
71       }
72     };
73     descriptor.setRoots(ContainerUtil.concat(
74       ContainerUtil.map(ModuleManager.getInstance(project).getModules(), new Function<Module, List<VirtualFile>>() {
75         @Override
76         public List<VirtualFile> fun(final Module module) {
77           return ModuleRootManager.getInstance(module).getSourceRoots(JavaModuleSourceRootTypes.SOURCES);
78         }
79       })));
80     return new ExcludedEntriesConfigurable(project, descriptor, configuration);
81   }
82
83
84   @Override
85   @NotNull
86   public String getId() {
87     return "Groovy compiler";
88   }
89
90   @Override
91   public Runnable enableSearch(String option) {
92     return null;
93   }
94
95   @Override
96   @Nls
97   public String getDisplayName() {
98     return "Groovy Compiler";
99   }
100
101   @Override
102   public String getHelpTopic() {
103     return "reference.projectsettings.compiler.groovy";
104   }
105
106   @Override
107   public JComponent createComponent() {
108     myExcludesPanel.add(myExcludes.createComponent());
109     return myMainPanel;
110   }
111
112   @Override
113   public boolean isModified() {
114     return !Comparing.equal(myConfig.getHeapSize(), myHeapSize.getText()) ||
115            myInvokeDynamicSupportCB.isSelected() != myConfig.isInvokeDynamic() ||
116            myExcludes.isModified();
117   }
118
119   @Override
120   public void apply() throws ConfigurationException {
121     myExcludes.apply();
122     myConfig.setHeapSize(myHeapSize.getText());
123     myConfig.setInvokeDynamic(myInvokeDynamicSupportCB.isSelected());
124   }
125
126   @Override
127   public void reset() {
128     myHeapSize.setText(myConfig.getHeapSize());
129     myInvokeDynamicSupportCB.setSelected(myConfig.isInvokeDynamic());
130     myExcludes.reset();
131   }
132
133   @Override
134   public void disposeUIResources() {
135     myExcludes.disposeUIResources();
136   }
137 }