@Override public void calculate( @NotNull GradleProject gradleEntity, @NotNull Project intellijEntity, @NotNull GradleChangesCalculationContext context) { calculateProjectChanges(gradleEntity, intellijEntity, context.getCurrentChanges()); final Set<? extends GradleModule> gradleSubEntities = gradleEntity.getModules(); final Collection<Module> intellijSubEntities = myPlatformFacade.getModules(intellijEntity); GradleDiffUtil.calculate( myModuleChangesCalculator, gradleSubEntities, intellijSubEntities, context); LibraryTable libraryTable = myPlatformFacade.getProjectLibraryTable(intellijEntity); GradleDiffUtil.calculate( myLibraryChangesCalculator, gradleEntity.getLibraries(), Arrays.asList(libraryTable.getLibraries()), context); }
@NotNull private GradleProject doResolveProjectInfo( @NotNull final GradleTaskId id, @NotNull String projectPath, @NotNull ProjectConnection connection, boolean downloadLibraries) throws IllegalArgumentException, IllegalStateException { ModelBuilder<? extends IdeaProject> modelBuilder = myHelper.getModelBuilder(id, connection, downloadLibraries); IdeaProject project = modelBuilder.get(); GradleProject result = populateProject(project, projectPath); // We need two different steps ('create' and 'populate') in order to handle module dependencies, // i.e. when one module is // configured to be dependency for another one, corresponding dependency module object should be // available during // populating dependent module object. Map<String, Pair<GradleModule, IdeaModule>> modules = createModules(project, result); populateModules(modules.values(), result); myLibraryNamesMixer.mixNames(result.getLibraries()); return result; }
@NotNull private static AbstractGradleDependency buildDependency( @NotNull GradleModule ownerModule, @NotNull IdeaSingleEntryLibraryDependency dependency, @NotNull GradleProject intellijProject) throws IllegalStateException { File binaryPath = dependency.getFile(); if (binaryPath == null) { throw new IllegalStateException( String.format( "Can't parse external library dependency '%s'. Reason: it doesn't specify path to the binaries", dependency)); } // Gradle API doesn't provide library name at the moment. GradleLibrary library = new GradleLibrary(FileUtil.getNameWithoutExtension(binaryPath)); library.addPath(LibraryPathType.BINARY, binaryPath.getAbsolutePath()); File sourcePath = dependency.getSource(); if (sourcePath != null) { library.addPath(LibraryPathType.SOURCE, sourcePath.getAbsolutePath()); } File javadocPath = dependency.getJavadoc(); if (javadocPath != null) { library.addPath(LibraryPathType.DOC, javadocPath.getAbsolutePath()); } if (!intellijProject.addLibrary(library)) { for (GradleLibrary registeredLibrary : intellijProject.getLibraries()) { if (registeredLibrary.equals(library)) { return new GradleLibraryDependency(ownerModule, registeredLibrary); } } } return new GradleLibraryDependency(ownerModule, library); }