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 com
.intellij
.compiler
.options
;
18 import com
.intellij
.compiler
.CompilerConfiguration
;
19 import com
.intellij
.compiler
.CompilerConfigurationImpl
;
20 import com
.intellij
.compiler
.CompilerSettingsFactory
;
21 import com
.intellij
.compiler
.RmicSettings
;
22 import com
.intellij
.openapi
.compiler
.CompilerBundle
;
23 import com
.intellij
.openapi
.compiler
.options
.ExcludedEntriesConfigurable
;
24 import com
.intellij
.openapi
.extensions
.Extensions
;
25 import com
.intellij
.openapi
.fileChooser
.FileChooserDescriptor
;
26 import com
.intellij
.openapi
.options
.Configurable
;
27 import com
.intellij
.openapi
.options
.ConfigurationException
;
28 import com
.intellij
.openapi
.options
.SearchableConfigurable
;
29 import com
.intellij
.openapi
.options
.ShowSettingsUtil
;
30 import com
.intellij
.openapi
.project
.Project
;
31 import com
.intellij
.openapi
.util
.Comparing
;
32 import com
.intellij
.openapi
.util
.IconLoader
;
33 import com
.intellij
.openapi
.vcs
.FileStatusManager
;
34 import org
.jetbrains
.annotations
.Nls
;
35 import org
.jetbrains
.annotations
.Nullable
;
38 import java
.util
.ArrayList
;
39 import java
.util
.Collections
;
40 import java
.util
.Comparator
;
41 import java
.util
.List
;
43 public class CompilerConfigurable
implements SearchableConfigurable
.Parent
{
44 private final Project myProject
;
45 private static final Icon ICON
= IconLoader
.getIcon("/general/configurableCompiler.png");
46 private final CompilerUIConfigurable myCompilerUIConfigurable
;
47 private Configurable
[] myKids
;
49 public static CompilerConfigurable
getInstance(Project project
) {
50 return ShowSettingsUtil
.getInstance().findProjectConfigurable(project
, CompilerConfigurable
.class);
53 public CompilerConfigurable(Project project
) {
55 myCompilerUIConfigurable
= new CompilerUIConfigurable(myProject
);
58 public String
getDisplayName() {
59 return CompilerBundle
.message("compiler.configurable.display.name");
62 public Icon
getIcon() {
66 public String
getHelpTopic() {
67 return "project.propCompiler";
70 public String
getId() {
71 return getHelpTopic();
75 public Runnable
enableSearch(String option
) {
79 public JComponent
createComponent() {
80 return myCompilerUIConfigurable
.createComponent();
83 public boolean hasOwnContent() {
87 public boolean isVisible() {
91 public boolean isModified() {
92 return myCompilerUIConfigurable
.isModified();
95 public void apply() throws ConfigurationException
{
96 myCompilerUIConfigurable
.apply();
100 myCompilerUIConfigurable
.reset();
103 public void disposeUIResources() {
104 myCompilerUIConfigurable
.disposeUIResources();
107 public Configurable
[] getConfigurables() {
108 if (myKids
== null) {
109 List
<Configurable
> kids
= new ArrayList
<Configurable
>();
111 CompilerConfigurationImpl compilerConfiguration
= (CompilerConfigurationImpl
)CompilerConfiguration
.getInstance(myProject
);
112 final FileChooserDescriptor descriptor
= new FileChooserDescriptor(true, true, false, false, false, true);
114 final ExcludedEntriesConfigurable excludes
= new ExcludedEntriesConfigurable(myProject
, descriptor
, compilerConfiguration
.getExcludedEntriesConfiguration()) {
115 public void apply() {
117 FileStatusManager
.getInstance(myProject
).fileStatusesChanged(); // refresh exclude from compile status
118 //ProjectView.getInstance(myProject).refresh();
122 kids
.add(createExcludesWrapper(excludes
));
124 ArrayList
<Configurable
> additional
= new ArrayList
<Configurable
>();
126 final CompilerSettingsFactory
[] factories
= Extensions
.getExtensions(CompilerSettingsFactory
.EP_NAME
, myProject
);
127 if (factories
.length
> 0) {
128 for (CompilerSettingsFactory factory
: factories
) {
129 additional
.add(factory
.create(myProject
));
131 Collections
.sort(additional
, new Comparator
<Configurable
>() {
132 public int compare(final Configurable o1
, final Configurable o2
) {
133 return Comparing
.compare(o1
.getDisplayName(), o2
.getDisplayName());
138 additional
.add(0, new RmicConfigurable(RmicSettings
.getInstance(myProject
)));
139 additional
.add(0, new AnnotationProcessorsConfigurable(myProject
));
140 additional
.add(0, new JavaCompilersTab(myProject
, compilerConfiguration
.getRegisteredJavaCompilers(), compilerConfiguration
.getDefaultCompiler()));
142 kids
.addAll(additional
);
143 myKids
= kids
.toArray(new Configurable
[kids
.size()]);
150 private static Configurable
createExcludesWrapper(final ExcludedEntriesConfigurable excludes
) {
151 return new Configurable(){
153 public String
getDisplayName() {
157 public Icon
getIcon() {
161 public String
getHelpTopic() {
162 return "reference.projectsettings.compiler.excludes";
165 public JComponent
createComponent() {
166 return excludes
.createComponent();
169 public void apply() {
173 public boolean isModified() {
174 return excludes
.isModified();
177 public void reset() {
181 public void disposeUIResources() {
182 excludes
.disposeUIResources();