@@ -34,39 +34,26 @@ export interface GradlePluginOptions {
3434}
3535
3636const cachePath = join ( projectGraphCacheDirectory , 'gradle.hash' ) ;
37- const targetsCache = existsSync ( cachePath ) ? readTargetsCache ( ) : { } ;
38-
39- export const calculatedTargets : Record <
37+ const targetsCache = readTargetsCache ( ) ;
38+ type GradleTargets = Record <
4039 string ,
4140 {
4241 name : string ;
4342 targets : Record < string , TargetConfiguration > ;
4443 metadata : ProjectConfiguration [ 'metadata' ] ;
4544 }
46- > = { } ;
45+ > ;
4746
48- function readTargetsCache ( ) : Record <
49- string ,
50- {
51- name : string ;
52- targets : Record < string , TargetConfiguration > ;
53- metadata : ProjectConfiguration [ 'metadata' ] ;
54- }
55- > {
56- return readJsonFile ( cachePath ) ;
47+ function readTargetsCache ( ) : GradleTargets {
48+ return existsSync ( cachePath ) ? readJsonFile ( cachePath ) : { } ;
5749}
5850
59- export function writeTargetsToCache (
60- targets : Record <
61- string ,
62- {
63- name : string ;
64- targets : Record < string , TargetConfiguration > ;
65- metadata : ProjectConfiguration [ 'metadata' ] ;
66- }
67- >
68- ) {
69- writeJsonFile ( cachePath , targets ) ;
51+ export function writeTargetsToCache ( ) {
52+ const oldCache = readTargetsCache ( ) ;
53+ writeJsonFile ( cachePath , {
54+ ...oldCache ,
55+ ...targetsCache ,
56+ } ) ;
7057}
7158
7259export const createNodes : CreateNodes < GradlePluginOptions > = [
@@ -83,76 +70,84 @@ export const createNodes: CreateNodes<GradlePluginOptions> = [
8370 options ?? { } ,
8471 context
8572 ) ;
86- if ( targetsCache [ hash ] ) {
87- calculatedTargets [ hash ] = targetsCache [ hash ] ;
88- return {
89- projects : {
90- [ projectRoot ] : targetsCache [ hash ] ,
91- } ,
92- } ;
93- }
94-
95- try {
96- const {
97- gradleProjectToTasksTypeMap,
98- gradleFileToOutputDirsMap,
99- gradleFileToGradleProjectMap,
100- gradleProjectToProjectName,
101- } = getGradleReport ( ) ;
102-
103- const gradleProject = gradleFileToGradleProjectMap . get (
104- gradleFilePath
105- ) as string ;
106- const projectName = gradleProjectToProjectName . get ( gradleProject ) ;
107- if ( ! projectName ) {
108- return ;
109- }
110-
111- const tasksTypeMap = gradleProjectToTasksTypeMap . get (
112- gradleProject
113- ) as Map < string , string > ;
114- let tasks : GradleTask [ ] = [ ] ;
115- for ( let [ taskName , taskType ] of tasksTypeMap . entries ( ) ) {
116- tasks . push ( {
117- type : taskType ,
118- name : taskName ,
119- } ) ;
120- }
121-
122- const outputDirs = gradleFileToOutputDirsMap . get ( gradleFilePath ) as Map <
123- string ,
124- string
125- > ;
126-
127- const { targets, targetGroups } = createGradleTargets (
128- tasks ,
129- options ,
130- context ,
131- outputDirs ,
132- gradleProject
133- ) ;
134- const project = {
135- name : projectName ,
136- targets,
137- metadata : {
138- targetGroups,
139- technologies : [ 'gradle' ] ,
140- } ,
141- } ;
142- calculatedTargets [ hash ] = project ;
143-
144- return {
145- projects : {
146- [ projectRoot ] : project ,
147- } ,
148- } ;
149- } catch ( e ) {
150- console . error ( e ) ;
73+ targetsCache [ hash ] ??= createGradleProject (
74+ gradleFilePath ,
75+ options ,
76+ context
77+ ) ;
78+ const project = targetsCache [ hash ] ;
79+ if ( ! project ) {
15180 return { } ;
15281 }
82+ return {
83+ projects : {
84+ [ projectRoot ] : project ,
85+ } ,
86+ } ;
15387 } ,
15488] ;
15589
90+ function createGradleProject (
91+ gradleFilePath : string ,
92+ options : GradlePluginOptions | undefined ,
93+ context : CreateNodesContext
94+ ) {
95+ try {
96+ const {
97+ gradleProjectToTasksTypeMap,
98+ gradleFileToOutputDirsMap,
99+ gradleFileToGradleProjectMap,
100+ gradleProjectToProjectName,
101+ } = getGradleReport ( ) ;
102+
103+ const gradleProject = gradleFileToGradleProjectMap . get (
104+ gradleFilePath
105+ ) as string ;
106+ const projectName = gradleProjectToProjectName . get ( gradleProject ) ;
107+ if ( ! projectName ) {
108+ return ;
109+ }
110+
111+ const tasksTypeMap = gradleProjectToTasksTypeMap . get ( gradleProject ) as Map <
112+ string ,
113+ string
114+ > ;
115+ let tasks : GradleTask [ ] = [ ] ;
116+ for ( let [ taskName , taskType ] of tasksTypeMap . entries ( ) ) {
117+ tasks . push ( {
118+ type : taskType ,
119+ name : taskName ,
120+ } ) ;
121+ }
122+
123+ const outputDirs = gradleFileToOutputDirsMap . get ( gradleFilePath ) as Map <
124+ string ,
125+ string
126+ > ;
127+
128+ const { targets, targetGroups } = createGradleTargets (
129+ tasks ,
130+ options ,
131+ context ,
132+ outputDirs ,
133+ gradleProject
134+ ) ;
135+ const project = {
136+ name : projectName ,
137+ targets,
138+ metadata : {
139+ targetGroups,
140+ technologies : [ 'gradle' ] ,
141+ } ,
142+ } ;
143+
144+ return project ;
145+ } catch ( e ) {
146+ console . error ( e ) ;
147+ return undefined ;
148+ }
149+ }
150+
156151function createGradleTargets (
157152 tasks : GradleTask [ ] ,
158153 options : GradlePluginOptions | undefined ,
0 commit comments