IDEA-102086 Gradle: Preserve more explicit project structure changes on auto-import

Skip language level processing during auto-import
This commit is contained in:
Denis.Zhdanov
2013-02-28 16:27:34 +04:00
parent e251a7d37b
commit e545bc65ee
7 changed files with 32 additions and 13 deletions
@@ -22,8 +22,8 @@ import org.jetbrains.annotations.Nullable;
* @author Denis Zhdanov
* @since 2/19/13 8:54 AM
*/
public abstract class AbstractGradleDependencyUserChange<T extends AbstractGradleDependencyUserChange>
extends AbstractGradleModuleAwareUserChange
public abstract class AbstractGradleDependencyUserChange<T extends AbstractGradleDependencyUserChange<T>>
extends AbstractGradleModuleAwareUserChange<T>
{
@Nullable
@@ -66,11 +66,11 @@ public abstract class AbstractGradleDependencyUserChange<T extends AbstractGradl
return true;
}
@SuppressWarnings({"CovariantCompareTo", "unchecked"})
@SuppressWarnings({"unchecked"})
@Override
public int compareTo(AbstractGradleModuleAwareUserChange o) {
public int compareTo(@NotNull GradleUserProjectChange<?> o) {
int cmp = super.compareTo(o);
if (cmp != 0) {
if (cmp != 0 || (!(o instanceof AbstractGradleDependencyUserChange))) {
return cmp;
}
@@ -22,7 +22,7 @@ import org.jetbrains.annotations.Nullable;
* @author Denis Zhdanov
* @since 2/19/13 8:48 AM
*/
public abstract class AbstractGradleModuleAwareUserChange<T extends AbstractGradleModuleAwareUserChange>
public abstract class AbstractGradleModuleAwareUserChange<T extends AbstractGradleModuleAwareUserChange<T>>
extends AbstractGradleUserProjectChange<T>
{
@@ -67,7 +67,10 @@ public abstract class AbstractGradleModuleAwareUserChange<T extends AbstractGrad
@SuppressWarnings("unchecked")
@Override
public int compareTo(T o) {
public int compareTo(@NotNull GradleUserProjectChange<?> o) {
if (!(o instanceof AbstractGradleModuleAwareUserChange<?>)) {
return super.compareTo(o);
}
AbstractGradleModuleAwareUserChange<T> that = (AbstractGradleModuleAwareUserChange<T>)o;
if (myModuleName == null) {
return that.myModuleName == null ? 0 : 1;
@@ -16,13 +16,14 @@
package org.jetbrains.plugins.gradle.autoimport;
import com.intellij.util.xmlb.XmlSerializerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Denis Zhdanov
* @since 2/18/13 8:29 PM
*/
public abstract class AbstractGradleUserProjectChange<T extends AbstractGradleUserProjectChange> implements GradleUserProjectChange<T> {
public abstract class AbstractGradleUserProjectChange<T extends AbstractGradleUserProjectChange<T>> implements GradleUserProjectChange<T> {
@SuppressWarnings("unchecked")
@Nullable
@@ -35,4 +36,9 @@ public abstract class AbstractGradleUserProjectChange<T extends AbstractGradleUs
public void loadState(T state) {
XmlSerializerUtil.copyBean(state, this);
}
@Override
public int compareTo(@NotNull GradleUserProjectChange<?> o) {
return getClass().getName().compareTo(o.getClass().getName());
}
}
@@ -28,7 +28,9 @@ import org.jetbrains.annotations.NotNull;
* @author Denis Zhdanov
* @since 2/18/13 8:03 PM
*/
public interface GradleUserProjectChange<T extends GradleUserProjectChange> extends PersistentStateComponent<T>, Comparable<T> {
public interface GradleUserProjectChange<T extends GradleUserProjectChange>
extends PersistentStateComponent<T>, Comparable<GradleUserProjectChange<?>>
{
void invite(@NotNull GradleUserProjectChangeVisitor visitor);
}
@@ -207,10 +207,14 @@ public class GradleEntityManageHelper {
private static void processProjectRenameChange(@NotNull GradleProjectRenameChange change, @NotNull EliminateChangesContext context) {
context.projectManager.renameProject(change.getGradleValue(), context.projectStructureHelper.getProject(), context.synchronous);
}
// Don't auto-apply language level change because we can't correctly process language level change manually made
// by a user - there is crazy processing related to project reloading after language level change and there is just
// no normal way to inject there.
private static void processLanguageLevelChange(@NotNull GradleLanguageLevelChange change, @NotNull EliminateChangesContext context) {
context.projectManager.setLanguageLevel(change.getGradleValue(), context.projectStructureHelper.getProject(), context.synchronous);
}
// private static void processLanguageLevelChange(@NotNull GradleLanguageLevelChange change, @NotNull EliminateChangesContext context) {
// context.projectManager.setLanguageLevel(change.getGradleValue(), context.projectStructureHelper.getProject(), context.synchronous);
// }
private static void processModulePresenceChange(@NotNull GradleModulePresenceChange change, @NotNull EliminateChangesContext context) {
GradleModuleId id = change.getGradleEntity();
@@ -386,7 +390,7 @@ public class GradleEntityManageHelper {
@Override
public void visit(@NotNull GradleLanguageLevelChange change) {
processLanguageLevelChange(change, EliminateChangesContext.this);
// processLanguageLevelChange(change, EliminateChangesContext.this);
}
@Override
@@ -28,6 +28,7 @@ import org.jetbrains.plugins.gradle.util.GradleUtil;
*/
public class GradleProjectManager {
@SuppressWarnings("MethodMayBeStatic")
public void renameProject(@NotNull final String newName, @NotNull final Project project, boolean synchronous) {
if (!(project instanceof ProjectEx) || newName.equals(project.getName())) {
return;
@@ -40,6 +41,7 @@ public class GradleProjectManager {
});
}
@SuppressWarnings("MethodMayBeStatic")
public void setLanguageLevel(@NotNull final LanguageLevel languageLevel, @NotNull Project project, boolean synchronous) {
final LanguageLevelProjectExtension languageLevelExtension = LanguageLevelProjectExtension.getInstance(project);
if (languageLevel == languageLevelExtension.getLanguageLevel()) {
@@ -250,6 +250,7 @@ public class GradleProjectStructureHelper {
return null;
}
@SuppressWarnings("MethodMayBeStatic")
@Nullable
public LibraryOrderEntry findIdeLibraryDependency(@NotNull final String libraryName,
@NotNull ModifiableRootModel model)
@@ -386,6 +387,7 @@ public class GradleProjectStructureHelper {
return null;
}
@SuppressWarnings("MethodMayBeStatic")
@Nullable
public ModuleOrderEntry findIdeModuleDependency(@NotNull GradleModuleDependency dependency, @NotNull ModifiableRootModel model) {
for (OrderEntry entry : model.getOrderEntries()) {