blob: bf5bad98711e65c3a7f833521465b81b27a0aba1 [file] [log] [blame]
/*
* Copyright 2016 The Bazel Authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.idea.blaze.java.settings;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.idea.blaze.base.settings.Blaze;
import com.google.idea.blaze.base.settings.ui.BlazeUserSettingsContributor;
import com.google.idea.blaze.java.libraries.JarCache;
import com.intellij.openapi.ui.Messages;
import com.intellij.uiDesigner.core.GridConstraints;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JPanel;
/** Contributes java-specific settings. */
public class BlazeJavaUserSettingsContributor implements BlazeUserSettingsContributor {
private JCheckBox useJarCache;
private JCheckBox attachSourcesByDefault;
private JCheckBox attachSourcesOnDemand;
private final ImmutableList<JComponent> components;
BlazeJavaUserSettingsContributor() {
useJarCache = new JCheckBox();
useJarCache.setText(
String.format(
"Use a local jar cache. More robust, but we can miss %s changes made outside the IDE.",
Blaze.defaultBuildSystemName()));
attachSourcesByDefault = new JCheckBox();
attachSourcesByDefault.setSelected(false);
attachSourcesByDefault.setText(
"Automatically attach sources on project sync (WARNING: increases index time by 100%+)");
attachSourcesByDefault.addActionListener(
(event) -> {
BlazeJavaUserSettings settings = BlazeJavaUserSettings.getInstance();
if (attachSourcesByDefault.isSelected() && !settings.getAttachSourcesByDefault()) {
int result =
Messages.showOkCancelDialog(
"You are turning on source jars by default. "
+ "This setting increases indexing time by "
+ ">100%, can cost ~1GB RAM, and will increase "
+ "project reopen time significantly. "
+ "Are you sure you want to proceed?",
"Turn On Sources By Default?", null);
if (result != Messages.OK) {
attachSourcesByDefault.setSelected(false);
}
}
});
attachSourcesOnDemand = new JCheckBox();
attachSourcesOnDemand.setSelected(false);
attachSourcesOnDemand.setText("Automatically attach sources when you open decompiled source");
ImmutableList.Builder<JComponent> builder = ImmutableList.builder();
if (JarCache.ENABLE_JAR_CACHE.getValue()) {
builder.add(useJarCache);
}
builder.add(attachSourcesOnDemand).add(attachSourcesByDefault);
components = builder.build();
}
@Override
public void apply() {
BlazeJavaUserSettings settings = BlazeJavaUserSettings.getInstance();
settings.setUseJarCache(useJarCache.isSelected());
settings.setAttachSourcesByDefault(attachSourcesByDefault.isSelected());
settings.setAttachSourcesOnDemand(attachSourcesOnDemand.isSelected());
}
@Override
public void reset() {
BlazeJavaUserSettings settings = BlazeJavaUserSettings.getInstance();
useJarCache.setSelected(settings.getUseJarCache());
attachSourcesByDefault.setSelected(settings.getAttachSourcesByDefault());
attachSourcesOnDemand.setSelected(settings.getAttachSourcesOnDemand());
}
@Override
public boolean isModified() {
BlazeJavaUserSettings settings = BlazeJavaUserSettings.getInstance();
return !Objects.equal(useJarCache.isSelected(), settings.getUseJarCache())
|| !Objects.equal(attachSourcesByDefault.isSelected(), settings.getAttachSourcesByDefault())
|| !Objects.equal(attachSourcesOnDemand.isSelected(), settings.getAttachSourcesOnDemand());
}
@Override
public int getRowCount() {
return components.size();
}
@Override
public int addComponents(JPanel panel, int rowi) {
for (JComponent contributedComponent : components) {
panel.add(
contributedComponent,
new GridConstraints(
rowi++,
0,
1,
2,
GridConstraints.ANCHOR_NORTHWEST,
GridConstraints.FILL_NONE,
GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW,
GridConstraints.SIZEPOLICY_FIXED,
null,
null,
null,
0,
false));
}
return rowi;
}
static class BlazeJavaUserSettingsProvider implements BlazeUserSettingsContributor.Provider {
@Override
public BlazeUserSettingsContributor getContributor() {
return new BlazeJavaUserSettingsContributor();
}
}
}