mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
@@ -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"/>
|
||||
|
||||
|
||||
+6
-2
@@ -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
|
||||
|
||||
+77
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user