Github user ravipesala commented on a diff in the pull request: https://github.com/apache/carbondata/pull/1469#discussion_r152570693 --- Diff: integration/spark-common/src/main/scala/org/apache/spark/sql/optimizer/CarbonDecoderOptimizerHelper.scala --- @@ -59,6 +61,26 @@ case class CarbonDictionaryTempDecoder( class CarbonDecoderProcessor { + val rm = universe.runtimeMirror(getClass.getClassLoader) + +// def getFields[T: TypeTag: reflect.ClassTag]( name: String, obj: T): Any = { +// val im = rm.reflect(obj) +// typeOf[T].members.collect { +// case m : MethodSymbol if m.isCaseAccessor && m.name.toString.equalsIgnoreCase(name) => +// val value = im.reflectMethod(m).apply() +// value +// } (collection.breakOut) +// } + + def getField[T: TypeTag: reflect.ClassTag]( name: String, obj: T): Any = { + val im = rm.reflect(obj) + + im.symbol.typeSignature.members.find( + _.name.toString.equals(name)).map( + l => im.reflectField(l.asTerm).get.asInstanceOf[LogicalPlan] --- End diff -- type casting to logical plan is not required
---