1 /* 2 * Copyright 2025 The Android Open Source Project 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 @file:JvmName("KSPLoggerUtil") 17 18 package androidx.appfunctions.compiler.core 19 20 import com.google.devtools.ksp.processing.KSPLogger 21 import com.google.devtools.ksp.symbol.FileLocation 22 import java.io.File 23 24 /** Logs a [ProcessingException] with detail about the error location. */ logExceptionnull25fun KSPLogger.logException(exception: ProcessingException) { 26 val location = exception.symbol?.location as? FileLocation 27 if (location == null) { 28 error("AppFunction compiler failed: ${exception.message}", exception.symbol) 29 return 30 } 31 32 val filePath = location.filePath 33 val errorLineNumber = location.lineNumber 34 val fileContent = File(filePath).readLines() 35 val errorLine = fileContent[errorLineNumber - 1] 36 val errorLinePointer = " ^".padStart(errorLine.indexOfFirst { it != ' ' } + 1) 37 error( 38 "Error in ${location.filePath}:${location.lineNumber}: " + 39 "${exception.message}\n${errorLine}\n$errorLinePointer\n", 40 exception.symbol, 41 ) 42 } 43