• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Dagger Authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package dagger.internal.codegen.xprocessing;
18 
19 import androidx.room.compiler.processing.XElement;
20 import androidx.room.compiler.processing.XProcessingEnv;
21 import androidx.room.compiler.processing.XType;
22 import androidx.room.compiler.processing.compat.XConverters;
23 import com.google.devtools.ksp.symbol.KSClassDeclaration;
24 import com.google.devtools.ksp.symbol.KSFunctionDeclaration;
25 import com.google.devtools.ksp.symbol.KSPropertyDeclaration;
26 import com.google.devtools.ksp.symbol.KSValueParameter;
27 import dagger.spi.model.DaggerElement;
28 import dagger.spi.model.DaggerProcessingEnv;
29 import dagger.spi.model.DaggerType;
30 
31 /** Convert Dagger model types to XProcessing types. */
32 public final class DaggerElements {
toXProcessing( DaggerElement element, DaggerProcessingEnv daggerProcessingEnv)33   public static XElement toXProcessing(
34       DaggerElement element, DaggerProcessingEnv daggerProcessingEnv) {
35     XProcessingEnv processingEnv = toXProcessing(daggerProcessingEnv);
36     switch (element.backend()) {
37       case JAVAC:
38         return XConverters.toXProcessing(element.javac(), processingEnv);
39       case KSP:
40         if (element.ksp() instanceof KSFunctionDeclaration) {
41           return XConverters.toXProcessing((KSFunctionDeclaration) element.ksp(), processingEnv);
42         } else if (element.ksp() instanceof KSClassDeclaration) {
43           return XConverters.toXProcessing((KSClassDeclaration) element.ksp(), processingEnv);
44         } else if (element.ksp() instanceof KSValueParameter) {
45           return XConverters.toXProcessing((KSValueParameter) element.ksp(), processingEnv);
46         } else if (element.ksp() instanceof KSPropertyDeclaration) {
47           return XConverters.toXProcessing((KSPropertyDeclaration) element.ksp(), processingEnv);
48         }
49         throw new IllegalStateException(
50             String.format("Unsupported ksp declaration %s.", element.ksp()));
51     }
52     throw new IllegalStateException(
53         String.format("Backend %s not supported yet.", element.backend()));
54   }
55 
toXProcessing(DaggerType type, DaggerProcessingEnv daggerProcessingEnv)56   public static XType toXProcessing(DaggerType type, DaggerProcessingEnv daggerProcessingEnv) {
57     XProcessingEnv processingEnv = toXProcessing(daggerProcessingEnv);
58     switch (type.backend()) {
59       case JAVAC:
60         return XConverters.toXProcessing(type.javac(), processingEnv);
61       case KSP:
62         return XConverters.toXProcessing(type.ksp(), processingEnv);
63     }
64     throw new IllegalStateException(String.format("Backend %s not supported yet.", type.backend()));
65   }
66 
toXProcessing(DaggerProcessingEnv processingEnv)67   public static XProcessingEnv toXProcessing(DaggerProcessingEnv processingEnv) {
68     switch (processingEnv.backend()) {
69       case JAVAC:
70         return XProcessingEnv.create(processingEnv.javac());
71       case KSP:
72         return XProcessingEnv.create(processingEnv.ksp(), processingEnv.resolver());
73     }
74     throw new IllegalStateException(
75         String.format("Backend %s not supported yet.", processingEnv.backend()));
76   }
77 
DaggerElements()78   private DaggerElements() {}
79 }
80