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