private NbGradleModel parseModel( FetchedProjectModels projectModels, Map<File, ProjectModelsOfExtensions> extensionModels) { Throwable issue = projectModels.getIssue(); if (issue != null) { issues.add(ModelLoadIssues.projectModelLoadError(mainProject, projectModels, null, issue)); } NbGradleMultiProjectDef projectDef = new NbGradleMultiProjectDef(projectModels.getProjectDef()); NbGenericModelInfo genericInfo = new NbGenericModelInfo(projectDef, modelFetcher.getSettingsFile()); NbGradleModel.Builder result = new NbGradleModel.Builder(genericInfo); File projectDir = genericInfo.getProjectDir(); ProjectExtensionModelCache projectCache = cache.tryGetProjectCache(projectDir); for (NbGradleExtensionRef extension : extensions) { String extensionName = extension.getName(); CachedModel cachedModel = projectCache != null ? projectCache.tryGetModel(extensionName) : null; Object extensionModel; if (cachedModel != null) { extensionModel = cachedModel.model; } else { ModelLoadResult modelLoadResult = modelLoadResultCache.get(extensionName); if (modelLoadResult == null) { modelLoadResult = getModelLoadResult(extension, projectDir, extensionModels); modelLoadResultCache.put(extensionName, modelLoadResult); } else { modelLoadResult = modelLoadResult.withMainProject(projectDir); } ParsedModel<?> parsedModels = extension.parseModel(modelLoadResult); extensionModel = parsedModels.getMainModel(); for (Map.Entry<File, ?> entry : parsedModels.getOtherProjectsModel().entrySet()) { cache.getProjectCache(entry.getKey()).addModel(extensionName, entry.getValue()); } } result.setModelForExtension(extension, extensionModel); } return result.create(); }
public ProjectModelFetcher(NbGradleProject project, GradleTarget gradleTarget) { this.settingsFile = NbGenericModelInfo.findSettingsGradle(project.getProjectDirectoryAsFile()); List<NbGradleExtensionRef> extensions = project.getExtensionRefs(); this.toolingModelNeeds = CollectionUtils.newHashMap(extensions.size()); Map<Object, List<GradleBuildInfoQuery<?>>> buildInfoRequests = Collections.emptyMap(); Map<Object, List<GradleProjectInfoQuery<?>>> projectInfoRequests = new HashMap<>(); List<Class<?>> models = new LinkedList<>(); for (NbGradleExtensionRef extensionRef : extensions) { String extensionName = extensionRef.getName(); GradleModelDefQuery2 modelQuery = extensionRef.getModelNeeds().getQuery2(); GradleModelDef modelDef = modelQuery.getModelDef(gradleTarget); models.addAll(modelDef.getToolingModels()); addAllToMultiMap(extensionName, modelDef.getProjectInfoQueries(), projectInfoRequests); addAllToMultiMap(extensionName, modelDef.getToolingModels(), toolingModelNeeds); } modelFetcher = new GenericModelFetcher(buildInfoRequests, projectInfoRequests, models); }