IDEA-76142: Gradle support - cannot update IDEA projects once one of build.gradle files changes

Added support for the project changes (name, language level)
This commit is contained in:
Denis.Zhdanov
2012-03-15 19:20:01 +04:00
parent f4e9d475a3
commit 54865eb72c
4 changed files with 110 additions and 10 deletions
+1
View File
@@ -61,6 +61,7 @@
<!--Conflict UI components-->
<applicationService serviceImplementation="org.jetbrains.plugins.gradle.sync.conflict.GradleConflictControlFactory"/>
<applicationService serviceImplementation="org.jetbrains.plugins.gradle.sync.conflict.GradleProjectConflictControlFactory"/>
<applicationService serviceImplementation="org.jetbrains.plugins.gradle.sync.conflict.GradleCommonDependencyConflictControlFactory"/>
<applicationService serviceImplementation="org.jetbrains.plugins.gradle.sync.conflict.GradleLibraryDependencyConflictControlFactory"/>
@@ -30,12 +30,15 @@ import java.util.Collection;
* @since 3/2/12 3:03 PM
*/
public class GradleConflictControlFactory {
@NotNull private final GradleProjectConflictControlFactory myProjectFactory;
@NotNull private final GradleLibraryDependencyConflictControlFactory myLibraryDependencyFactory;
@NotNull private final GradleCommonDependencyConflictControlFactory myCommonDependencyFactory;
public GradleConflictControlFactory(@NotNull GradleLibraryDependencyConflictControlFactory libraryFactory,
public GradleConflictControlFactory(@NotNull GradleProjectConflictControlFactory factory,
@NotNull GradleLibraryDependencyConflictControlFactory libraryFactory,
@NotNull GradleCommonDependencyConflictControlFactory commonDependencyFactory) {
myProjectFactory = factory;
myLibraryDependencyFactory = libraryFactory;
myCommonDependencyFactory = commonDependencyFactory;
}
@@ -54,6 +57,7 @@ public class GradleConflictControlFactory {
GradleUtil.dispatch(entity, new IntellijEntityVisitor() {
@Override
public void visit(@NotNull Project project) {
result.set(myProjectFactory.getControl(changes));
}
@Override
@@ -0,0 +1,77 @@
package org.jetbrains.plugins.gradle.sync.conflict;
import com.intellij.openapi.util.Ref;
import com.intellij.pom.java.LanguageLevel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.diff.GradleProjectStructureChange;
import org.jetbrains.plugins.gradle.diff.GradleProjectStructureChangeVisitor;
import org.jetbrains.plugins.gradle.diff.GradleProjectStructureChangeVisitorAdapter;
import org.jetbrains.plugins.gradle.diff.project.GradleLanguageLevelChange;
import org.jetbrains.plugins.gradle.diff.project.GradleProjectRenameChange;
import org.jetbrains.plugins.gradle.ui.MatrixControlBuilder;
import org.jetbrains.plugins.gradle.util.GradleBundle;
import org.jetbrains.plugins.gradle.util.GradleUtil;
import javax.swing.*;
import java.util.Collection;
/**
* Thread-safe.
*
* @author Denis Zhdanov
* @since 3/15/12 4:26 PM
*/
public class GradleProjectConflictControlFactory {
@SuppressWarnings("MethodMayBeStatic")
@Nullable
public JComponent getControl(Collection<GradleProjectStructureChange> changes) {
final Ref<GradleProjectRenameChange> renameChangeRef = new Ref<GradleProjectRenameChange>();
final Ref<GradleLanguageLevelChange> languageLevelChangeRef = new Ref<GradleLanguageLevelChange>();
GradleProjectStructureChangeVisitor visitor = new GradleProjectStructureChangeVisitorAdapter() {
@Override
public void visit(@NotNull GradleProjectRenameChange change) {
renameChangeRef.set(change);
}
@Override
public void visit(@NotNull GradleLanguageLevelChange change) {
languageLevelChangeRef.set(change);
}
};
for (GradleProjectStructureChange change : changes) {
if (renameChangeRef.get() != null && languageLevelChangeRef.get() != null) {
break;
}
change.invite(visitor);
}
final GradleProjectRenameChange renameChange = renameChangeRef.get();
final GradleLanguageLevelChange languageLevelChange = languageLevelChangeRef.get();
if (renameChange == null && languageLevelChange == null) {
return null;
}
MatrixControlBuilder builder = GradleUtil.getConflictChangeBuilder();
if (renameChange != null) {
builder.addRow(GradleBundle.message("gradle.import.structure.settings.label.name"),
renameChange.getGradleValue(), renameChange.getIntellijValue());
}
if (languageLevelChange != null) {
builder.addRow(GradleBundle.message("gradle.import.structure.settings.label.language.level"),
getTextToShow(languageLevelChange.getGradleValue()), getTextToShow(languageLevelChange.getIntellijValue()));
}
return builder.build();
}
@NotNull
private static String getTextToShow(@NotNull LanguageLevel level) {
final String s = level.toString();
return s.substring(s.indexOf('1')).replace('_', '.');
}
}
@@ -7,6 +7,7 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import java.awt.*;
import java.util.Arrays;
@@ -34,27 +35,36 @@ import java.util.Arrays;
public class MatrixControlBuilder {
private final DefaultTableModel myModel = new DefaultTableModel();
private final JComponent result;
private final JBTable myTable;
private final JComponent myResult;
private final int[] myColumnWidths;
private final FontMetrics myFontMetrics;
public MatrixControlBuilder(@NotNull String ... columns) {
myModel.addColumn(""); // Row name
for (String column : columns) {
myModel.addColumn(column);
}
final JBTable table = new JBTable(myModel) {
myTable = new JBTable(myModel) {
@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
};
table.setStriped(true);
myTable.setStriped(true);
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(SwingConstants.CENTER);
for (int i = 1/* don't align row name */, max = table.getColumnCount(); i < max; i++) {
table.getColumnModel().getColumn(i).setCellRenderer(renderer);
for (int i = 1/* don't align row name */, max = myTable.getColumnCount(); i < max; i++) {
myTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
}
myResult = ScrollPaneFactory.createScrollPane(myTable);
myColumnWidths = new int[columns.length + 1/*'name' column*/];
myFontMetrics = myTable.getFontMetrics(myTable.getFont());
for (int i = 0; i < columns.length; i++) {
myColumnWidths[i + 1] = myFontMetrics.stringWidth(columns[i]);
}
//table.setDefaultRenderer(String.class, renderer);
result = ScrollPaneFactory.createScrollPane(table);
}
/**
@@ -82,10 +92,18 @@ public class MatrixControlBuilder {
rowData[0] = name;
System.arraycopy(values, 0, rowData, 1, values.length);
myModel.addRow(rowData);
for (int i = 0; i < rowData.length; i++) {
myColumnWidths[i] = Math.max(myFontMetrics.stringWidth(rowData[i].toString()), myColumnWidths[i]);
}
}
@NotNull
public JComponent build() {
return result;
final TableColumnModel columnModel = myTable.getColumnModel();
for (int i = 0; i < myColumnWidths.length; i++) {
columnModel.getColumn(i).setMinWidth(myColumnWidths[i] + 4);
}
return myResult;
}
}