gradle: root external project wrong replacement fix

This commit is contained in:
Vladislav.Soroka
2014-10-03 16:10:54 +04:00
parent d7ac522bd6
commit 904ee85add
3 changed files with 34 additions and 20 deletions
@@ -27,7 +27,7 @@ import java.util.Set;
* @author Vladislav.Soroka
* @since 7/14/2014
*/
public class DefaultExternalSourceDirectorySet implements ExternalSourceDirectorySet {
public class DefaultExternalSourceDirectorySet implements ModifiableExternalSourceDirectorySet {
private static final long serialVersionUID = 1L;
@NotNull
@@ -0,0 +1,26 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* 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.intellij.openapi.externalSystem.model;
import java.io.File;
/**
* @author Vladislav.Soroka
* @since 10/3/2014
*/
public interface ModifiableExternalSourceDirectorySet extends ExternalSourceDirectorySet {
void setOutputDir(File outputPath);
}
@@ -258,12 +258,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
buildDir = buildDir == null ? externalProject.getBuildDir() : buildDir;
if (!inheritOutputDirs) {
boolean isInitialProjectDataModified = fixCompileOutputPaths(compileOutputPaths, externalProject);
if (isInitialProjectDataModified) {
final DataNode<ProjectData> projectDataNode = ExternalSystemApiUtil.findParent(ideModule, ProjectKeys.PROJECT);
assert projectDataNode != null;
projectDataNode.createOrReplaceChild(ExternalProjectDataService.KEY, externalProject);
}
fixCompileOutputPaths(compileOutputPaths, externalProject);
}
}
else {
@@ -714,9 +709,8 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
return taskName.toLowerCase(Locale.ENGLISH).contains("idea");
}
private static boolean fixCompileOutputPaths(@NotNull Map<ExternalSystemSourceType, File> compileOutputPaths,
@NotNull ExternalProject externalProject) {
boolean isInitialProjectDataModified = false;
private static void fixCompileOutputPaths(@NotNull Map<ExternalSystemSourceType, File> compileOutputPaths,
@NotNull ExternalProject externalProject) {
final File sourceCompileOutputPath = compileOutputPaths.get(ExternalSystemSourceType.SOURCE);
if (sourceCompileOutputPath == null) {
addCompileOutputPath(compileOutputPaths, externalProject, MAIN_SOURCE_SET, ExternalSystemSourceType.SOURCE);
@@ -726,14 +720,12 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
final ExternalSourceSet mainSourceSet = externalProject.getSourceSets().get(MAIN_SOURCE_SET);
if (mainSourceSet != null) {
final ExternalSourceDirectorySet sourceDirectories = mainSourceSet.getSources().get(ExternalSystemSourceType.SOURCE);
if (sourceDirectories instanceof DefaultExternalSourceDirectorySet) {
((DefaultExternalSourceDirectorySet)sourceDirectories).setOutputDir(sourceCompileOutputPath);
isInitialProjectDataModified = true;
if (sourceDirectories instanceof ModifiableExternalSourceDirectorySet) {
((ModifiableExternalSourceDirectorySet)sourceDirectories).setOutputDir(sourceCompileOutputPath);
}
final ExternalSourceDirectorySet resourceDirectories = mainSourceSet.getSources().get(ExternalSystemSourceType.RESOURCE);
if (resourceDirectories instanceof DefaultExternalSourceDirectorySet) {
((DefaultExternalSourceDirectorySet)resourceDirectories).setOutputDir(sourceCompileOutputPath);
isInitialProjectDataModified = true;
if (resourceDirectories instanceof ModifiableExternalSourceDirectorySet) {
((ModifiableExternalSourceDirectorySet)resourceDirectories).setOutputDir(sourceCompileOutputPath);
}
}
}
@@ -749,18 +741,14 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
final ExternalSourceDirectorySet testDirectories = testSourceSet.getSources().get(ExternalSystemSourceType.TEST);
if (testDirectories instanceof DefaultExternalSourceDirectorySet) {
((DefaultExternalSourceDirectorySet)testDirectories).setOutputDir(testCompileOutputPath);
isInitialProjectDataModified = true;
}
final ExternalSourceDirectorySet testResourceDirectories =
testSourceSet.getSources().get(ExternalSystemSourceType.TEST_RESOURCE);
if (testResourceDirectories instanceof DefaultExternalSourceDirectorySet) {
((DefaultExternalSourceDirectorySet)testResourceDirectories).setOutputDir(testCompileOutputPath);
isInitialProjectDataModified = true;
}
}
}
return isInitialProjectDataModified;
}
private static void addCompileOutputPath(@NotNull Map<ExternalSystemSourceType, File> compileOutputPaths,