mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-75726 Gradle: Allow to adjust project settings prior to importing
1. Dependencies model is refactored in order to share common functionality at the base class; 2. Added ability to adjust module dependency settings prior to importing;
This commit is contained in:
+2
-2
@@ -259,7 +259,7 @@ public class GradleModulesImporter {
|
||||
dependency.invite(new GradleEntityVisitorAdapter() {
|
||||
@Override
|
||||
public void visit(@NotNull GradleModuleDependency dependency) {
|
||||
ModuleOrderEntry orderEntry = model.addModuleOrderEntry(modules.get(dependency.getModule()));
|
||||
ModuleOrderEntry orderEntry = model.addModuleOrderEntry(modules.get(dependency.getTarget()));
|
||||
orderEntry.setExported(dependency.isExported());
|
||||
orderEntry.setScope(dependency.getScope());
|
||||
}
|
||||
@@ -412,7 +412,7 @@ public class GradleModulesImporter {
|
||||
GradleEntityVisitor visitor = new GradleEntityVisitorAdapter() {
|
||||
@Override
|
||||
public void visit(@NotNull GradleLibraryDependency dependency) {
|
||||
GradleLibrary gradleLibrary = dependency.getLibrary();
|
||||
GradleLibrary gradleLibrary = dependency.getTarget();
|
||||
Library intellijLibrary = libraryMappings.get(gradleLibrary);
|
||||
if (intellijLibrary == null) {
|
||||
GradleLog.LOG.warn(String.format(
|
||||
|
||||
+75
-6
@@ -3,16 +3,35 @@ package org.jetbrains.plugins.gradle.importing.model;
|
||||
import com.intellij.openapi.roots.DependencyScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:41 PM
|
||||
*/
|
||||
public abstract class AbstractGradleDependency extends AbstractGradleEntity implements GradleDependency {
|
||||
public abstract class AbstractGradleDependency<T extends AbstractGradleEntity & Named> extends AbstractGradleEntity implements GradleDependency, Named {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final T myTarget;
|
||||
|
||||
private DependencyScope myScope = DependencyScope.COMPILE;
|
||||
private boolean myExported;
|
||||
|
||||
private transient boolean mySkipNameChange;
|
||||
private boolean myExported;
|
||||
|
||||
protected AbstractGradleDependency(@NotNull T dependency) {
|
||||
myTarget = dependency;
|
||||
initListener();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public T getTarget() {
|
||||
return myTarget;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
@@ -33,19 +52,69 @@ public abstract class AbstractGradleDependency extends AbstractGradleEntity impl
|
||||
myExported = exported;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return 31;
|
||||
public String getName() {
|
||||
return myTarget.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(@NotNull String name) {
|
||||
mySkipNameChange = true;
|
||||
try {
|
||||
String oldName = myTarget.getName();
|
||||
myTarget.setName(name);
|
||||
firePropertyChange(Named.NAME_PROPERTY, oldName, name);
|
||||
}
|
||||
finally {
|
||||
mySkipNameChange = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void initListener() {
|
||||
myTarget.addPropertyChangeListener(new PropertyChangeListener() {
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (mySkipNameChange || !Named.NAME_PROPERTY.equals(evt.getPropertyName())) {
|
||||
return;
|
||||
}
|
||||
mySkipNameChange = true;
|
||||
try {
|
||||
firePropertyChange(Named.NAME_PROPERTY, evt.getOldValue(), evt.getNewValue());
|
||||
}
|
||||
finally {
|
||||
mySkipNameChange = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@SuppressWarnings("MethodOverridesPrivateMethodOfSuperclass")
|
||||
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
|
||||
in.defaultReadObject();
|
||||
initListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return myTarget.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
return this == o || (o != null && getClass() == o.getClass());
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
AbstractGradleDependency<?> that = (AbstractGradleDependency<?>)o;
|
||||
return myTarget.equals(that.myTarget);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "scope: " + getScope() + ", exported: " + isExported();
|
||||
return "scope: " + getScope() + ", exported: " + isExported() + ", dependency: " + getTarget();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+3
-82
@@ -2,30 +2,16 @@ package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
|
||||
/**
|
||||
* Not thread-safe.
|
||||
*
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:46 PM
|
||||
*/
|
||||
public class GradleLibraryDependency extends AbstractGradleDependency implements Named {
|
||||
|
||||
private final GradleLibrary myLibrary;
|
||||
private transient boolean mySkipNameChange;
|
||||
public class GradleLibraryDependency extends AbstractGradleDependency<GradleLibrary> implements Named {
|
||||
|
||||
public GradleLibraryDependency(@NotNull GradleLibrary library) {
|
||||
myLibrary = library;
|
||||
initListener();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public GradleLibrary getLibrary() {
|
||||
return myLibrary;
|
||||
super(library);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -33,75 +19,10 @@ public class GradleLibraryDependency extends AbstractGradleDependency implements
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return myLibrary.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(@NotNull String name) {
|
||||
mySkipNameChange = true;
|
||||
try {
|
||||
String oldName = myLibrary.getName();
|
||||
myLibrary.setName(name);
|
||||
firePropertyChange(Named.NAME_PROPERTY, oldName, name);
|
||||
}
|
||||
finally {
|
||||
mySkipNameChange = false;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("MethodOverridesPrivateMethodOfSuperclass")
|
||||
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
|
||||
in.defaultReadObject();
|
||||
initListener();
|
||||
}
|
||||
|
||||
private void initListener() {
|
||||
myLibrary.addPropertyChangeListener(new PropertyChangeListener() {
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (mySkipNameChange || !Named.NAME_PROPERTY.equals(evt.getPropertyName())) {
|
||||
return;
|
||||
}
|
||||
mySkipNameChange = true;
|
||||
try {
|
||||
firePropertyChange(Named.NAME_PROPERTY, evt.getOldValue(), evt.getNewValue());
|
||||
}
|
||||
finally {
|
||||
mySkipNameChange = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + myLibrary.hashCode();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
|
||||
GradleLibraryDependency that = (GradleLibraryDependency)o;
|
||||
return myLibrary.equals(that.myLibrary);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + ", dependency library: " + getLibrary();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public GradleLibraryDependency clone(@NotNull GradleEntityCloneContext context) {
|
||||
GradleLibraryDependency result = new GradleLibraryDependency(getLibrary().clone(context));
|
||||
GradleLibraryDependency result = new GradleLibraryDependency(getTarget().clone(context));
|
||||
copyTo(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
+4
-30
@@ -8,26 +8,19 @@ import java.util.Comparator;
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:40 PM
|
||||
*/
|
||||
public class GradleModuleDependency extends AbstractGradleDependency {
|
||||
public class GradleModuleDependency extends AbstractGradleDependency<GradleModule> {
|
||||
|
||||
public static final Comparator<GradleModuleDependency> COMPARATOR = new Comparator<GradleModuleDependency>() {
|
||||
@Override
|
||||
public int compare(GradleModuleDependency o1, GradleModuleDependency o2) {
|
||||
return Named.COMPARATOR.compare(o1.getModule(), o2.getModule());
|
||||
return Named.COMPARATOR.compare(o1.getTarget(), o2.getTarget());
|
||||
}
|
||||
};
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final GradleModule myModule;
|
||||
|
||||
public GradleModuleDependency(@NotNull GradleModule module) {
|
||||
myModule = module;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public GradleModule getModule() {
|
||||
return myModule;
|
||||
super(module);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -35,29 +28,10 @@ public class GradleModuleDependency extends AbstractGradleDependency {
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return myModule.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
GradleModuleDependency that = (GradleModuleDependency)o;
|
||||
return myModule.equals(that.myModule);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + ", dependency module: " + getModule();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public GradleModuleDependency clone(@NotNull GradleEntityCloneContext context) {
|
||||
GradleModuleDependency result = new GradleModuleDependency(getModule().clone(context));
|
||||
GradleModuleDependency result = new GradleModuleDependency(getTarget().clone(context));
|
||||
copyTo(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
+41
@@ -1,8 +1,11 @@
|
||||
package org.jetbrains.plugins.gradle.importing.wizard.adjust;
|
||||
|
||||
import com.intellij.openapi.roots.DependencyScope;
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.importing.model.AbstractGradleDependency;
|
||||
import org.jetbrains.plugins.gradle.importing.model.Named;
|
||||
import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
import org.jetbrains.plugins.gradle.util.GradleUtil;
|
||||
@@ -69,4 +72,42 @@ public class GradleAdjustImportSettingsUtil {
|
||||
GradleUtil.showBalloon(componentNameUI, MessageType.ERROR, GradleBundle.message("gradle.import.text.error.undefined.name"));
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows to configure GUI controls for managing common dependency settings.
|
||||
*
|
||||
* @param builder target GUI builder
|
||||
* @param dependency target dependency
|
||||
* @return pair of two callbacks. The first one is {@link GradleProjectStructureNodeSettings#refresh() 'refresh'} callback,
|
||||
* the second one is {@link GradleProjectStructureNodeSettings#validate() 'validate'} callback
|
||||
*/
|
||||
@NotNull
|
||||
public static Pair<Runnable, Runnable> configureCommonDependencyControls(@NotNull GradleProjectSettingsBuilder builder,
|
||||
@NotNull final AbstractGradleDependency dependency)
|
||||
{
|
||||
builder.setKeyAndValueControlsOnSameRow(true);
|
||||
|
||||
final JCheckBox exportedCheckBock = new JCheckBox();
|
||||
builder.add("gradle.import.structure.settings.label.export", exportedCheckBock);
|
||||
|
||||
final JComboBox scopeComboBox = new JComboBox(DependencyScope.values());
|
||||
builder.add("gradle.import.structure.settings.label.scope", scopeComboBox);
|
||||
|
||||
Runnable refreshCallback = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
exportedCheckBock.setSelected(dependency.isExported());
|
||||
scopeComboBox.setSelectedItem(dependency.getScope());
|
||||
}
|
||||
};
|
||||
|
||||
Runnable validateCallback = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
dependency.setExported(exportedCheckBock.isSelected());
|
||||
dependency.setScope((DependencyScope)scopeComboBox.getSelectedItem());
|
||||
}
|
||||
};
|
||||
return new Pair<Runnable, Runnable>(refreshCallback, validateCallback);
|
||||
}
|
||||
}
|
||||
|
||||
+9
-27
@@ -1,6 +1,6 @@
|
||||
package org.jetbrains.plugins.gradle.importing.wizard.adjust;
|
||||
|
||||
import com.intellij.openapi.roots.DependencyScope;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleLibraryDependency;
|
||||
|
||||
@@ -12,44 +12,27 @@ import javax.swing.*;
|
||||
*/
|
||||
public class GradleLibraryDependencySettings implements GradleProjectStructureNodeSettings {
|
||||
|
||||
private final GradleLibraryDependency myDependency;
|
||||
private final GradleLibrarySettings myLibrarySettings;
|
||||
private final JCheckBox myExportedCheckBox;
|
||||
private final JComboBox myScopeComboBox;
|
||||
private final Runnable myRefreshCallback;
|
||||
private final Runnable myValidateCallback;
|
||||
private final JComponent myComponent;
|
||||
|
||||
public GradleLibraryDependencySettings(@NotNull GradleLibraryDependency dependency) {
|
||||
myDependency = dependency;
|
||||
myLibrarySettings = new GradleLibrarySettings(dependency.getLibrary());
|
||||
myLibrarySettings = new GradleLibrarySettings(dependency.getTarget());
|
||||
|
||||
GradleProjectSettingsBuilder builder = new GradleProjectSettingsBuilder();
|
||||
builder.setKeyAndValueControlsOnSameRow(true);
|
||||
builder.add(myLibrarySettings.getComponent(), GradleProjectSettingsBuilder.InsetSize.NONE);
|
||||
myExportedCheckBox = setupExported(builder);
|
||||
myScopeComboBox = setupScope(builder);
|
||||
Pair<Runnable,Runnable> pair = GradleAdjustImportSettingsUtil.configureCommonDependencyControls(builder, dependency);
|
||||
myRefreshCallback = pair.first;
|
||||
myValidateCallback = pair.second;
|
||||
myComponent = builder.build();
|
||||
refresh();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JCheckBox setupExported(@NotNull GradleProjectSettingsBuilder builder) {
|
||||
JCheckBox result = new JCheckBox();
|
||||
builder.add("gradle.import.structure.settings.label.export", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JComboBox setupScope(@NotNull GradleProjectSettingsBuilder builder) {
|
||||
JComboBox result = new JComboBox(DependencyScope.values());
|
||||
builder.add("gradle.import.structure.settings.label.scope", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
myLibrarySettings.refresh();
|
||||
myExportedCheckBox.setSelected(myDependency.isExported());
|
||||
myScopeComboBox.setSelectedItem(myDependency.getScope());
|
||||
myRefreshCallback.run();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,8 +40,7 @@ public class GradleLibraryDependencySettings implements GradleProjectStructureNo
|
||||
if (!myLibrarySettings.validate()) {
|
||||
return false;
|
||||
}
|
||||
myDependency.setExported(myExportedCheckBox.isSelected());
|
||||
myDependency.setScope((DependencyScope)myScopeComboBox.getSelectedItem());
|
||||
myValidateCallback.run();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
package org.jetbrains.plugins.gradle.importing.wizard.adjust;
|
||||
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleModuleDependency;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 10/28/11 12:40 PM
|
||||
*/
|
||||
public class GradleModuleDependencySettings implements GradleProjectStructureNodeSettings {
|
||||
|
||||
private final GradleModuleSettings myModuleSettings;
|
||||
private final Runnable myRefreshCallback;
|
||||
private final Runnable myValidateCallback;
|
||||
private final JComponent myComponent;
|
||||
|
||||
public GradleModuleDependencySettings(@NotNull GradleModuleDependency dependency) {
|
||||
myModuleSettings = new GradleModuleSettings(dependency.getTarget());
|
||||
|
||||
GradleProjectSettingsBuilder builder = new GradleProjectSettingsBuilder();
|
||||
builder.add(myModuleSettings.getComponent(), GradleProjectSettingsBuilder.InsetSize.NONE);
|
||||
Pair<Runnable,Runnable> pair = GradleAdjustImportSettingsUtil.configureCommonDependencyControls(builder, dependency);
|
||||
myRefreshCallback = pair.first;
|
||||
myValidateCallback = pair.second;
|
||||
myComponent = builder.build();
|
||||
refresh();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validate() {
|
||||
if (!myModuleSettings.validate()) {
|
||||
return false;
|
||||
}
|
||||
myValidateCallback.run();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
myModuleSettings.refresh();
|
||||
myRefreshCallback.run();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JComponent getComponent() {
|
||||
return myComponent;
|
||||
}
|
||||
}
|
||||
+4
-3
@@ -57,12 +57,12 @@ public class GradleProjectStructureFactory {
|
||||
|
||||
@Override
|
||||
public void visit(@NotNull GradleModuleDependency dependency) {
|
||||
visit(dependency.getModule());
|
||||
visit(dependency.getTarget());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(@NotNull GradleLibraryDependency dependency) {
|
||||
visit(dependency.getLibrary());
|
||||
visit(dependency.getTarget());
|
||||
}
|
||||
});
|
||||
return result.get();
|
||||
@@ -117,7 +117,8 @@ public class GradleProjectStructureFactory {
|
||||
|
||||
@Override
|
||||
public void visit(@NotNull GradleModuleDependency dependency) {
|
||||
visit(dependency.getModule());
|
||||
setupController(dependency, treeModel, treeNodes);
|
||||
result.set(new GradleModuleDependencySettings(dependency));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user