Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3361098 authored by Eugene Susla's avatar Eugene Susla
Browse files

Update codegen to match javaparser update

Test: . $ANDROID_BUILD_TOP/frameworks/base/tests/Codegen/runTest.sh
Change-Id: I3e961a9cee5c71bd2195328dcb53dabd61255aa6
parent c7ccc2cd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1798,7 +1798,7 @@ public final class SampleDataClass implements Parcelable {
    }

    @DataClass.Generated(
            time = 1565048798524L,
            time = 1565126122525L,
            codegenVersion = "1.0.0",
            sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleDataClass.java",
            inputSignatures = "public static final  java.lang.String STATE_NAME_UNDEFINED\npublic static final  java.lang.String STATE_NAME_ON\npublic static final  java.lang.String STATE_NAME_OFF\npublic static final  int STATE_UNDEFINED\npublic static final  int STATE_ON\npublic static final  int STATE_OFF\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_MANUAL_REQUEST\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST\npublic static final @com.android.codegentest.SampleDataClass.RequestFlags int FLAG_AUGMENTED_REQUEST\nprivate  int mNum\nprivate  int mNum2\nprivate  int mNum4\nprivate @android.annotation.Nullable java.lang.String mName\nprivate @android.annotation.NonNull java.lang.String mName2\nprivate @android.annotation.NonNull java.lang.String mName4\nprivate @android.annotation.Nullable android.view.accessibility.AccessibilityNodeInfo mOtherParcelable\nprivate @com.android.internal.util.DataClass.ParcelWith(com.android.codegentest.MyDateParcelling.class) @android.annotation.NonNull java.util.Date mDate\nprivate @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForPattern.class) @android.annotation.NonNull java.util.regex.Pattern mPattern\nprivate @android.annotation.NonNull java.util.List<android.net.LinkAddress> mLinkAddresses2\nprivate @com.android.internal.util.DataClass.PluralOf(\"linkAddress\") @android.annotation.NonNull java.util.ArrayList<android.net.LinkAddress> mLinkAddresses\nprivate @android.annotation.Nullable android.net.LinkAddress[] mLinkAddresses4\nprivate @com.android.codegentest.SampleDataClass.StateName @android.annotation.NonNull java.lang.String mStateName\nprivate @com.android.codegentest.SampleDataClass.RequestFlags int mFlags\nprivate @com.android.codegentest.SampleDataClass.State int mState\npublic @android.annotation.NonNull java.lang.CharSequence charSeq\nprivate final @android.annotation.Nullable android.net.LinkAddress[] mLinkAddresses5\nprivate transient  android.net.LinkAddress[] mLinkAddresses6\ntransient  int[] mTmpStorage\nprivate @android.annotation.StringRes int mStringRes\nprivate @android.annotation.IntRange(from=0L, to=6L) int mDayOfWeek\nprivate @android.annotation.Size(2L) @android.annotation.NonNull @com.android.internal.util.DataClass.Each @android.annotation.FloatRange(from=0.0) float[] mCoords\nprivate static  java.lang.String defaultName4()\nprivate  int[] lazyInitTmpStorage()\npublic  android.net.LinkAddress[] getLinkAddresses4()\nprivate  boolean patternEquals(java.util.regex.Pattern)\nprivate  int patternHashCode()\nprivate  void onConstructed()\npublic  void dump(java.io.PrintWriter)\nclass SampleDataClass extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genBuilder=true, genConstructor=true, genEqualsHashCode=true, genToString=true, genForEachField=true, genSetters=true)")
+1 −1
Original line number Diff line number Diff line
@@ -176,7 +176,7 @@ public class SampleWithCustomBuilder {
    }

    @DataClass.Generated(
            time = 1565048799396L,
            time = 1565126123496L,
            codegenVersion = "1.0.0",
            sourceFile = "frameworks/base/tests/Codegen/src/com/android/codegentest/SampleWithCustomBuilder.java",
            inputSignatures = "  long delayAmount\n @android.annotation.NonNull java.util.concurrent.TimeUnit delayUnit\n  long creationTimestamp\nclass SampleWithCustomBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=true)\nabstract  com.android.codegentest.SampleWithCustomBuilder.Builder setDelayAmount(long)\npublic abstract  com.android.codegentest.SampleWithCustomBuilder.Builder setDelayUnit(java.util.concurrent.TimeUnit)\npublic  com.android.codegentest.SampleWithCustomBuilder.Builder setDelay(long,java.util.concurrent.TimeUnit)\nclass BaseBuilder extends java.lang.Object implements []")
+21 −6
Original line number Diff line number Diff line
package com.android.codegen

import com.github.javaparser.JavaParser
import com.github.javaparser.ParseProblemException
import com.github.javaparser.ParseResult
import com.github.javaparser.ast.CompilationUnit
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration

open class ClassInfo(val sourceLines: List<String>) {

    private val userSourceCode = (sourceLines + "}").joinToString("\n")
    val fileAst = try {
        JavaParser.parse(userSourceCode)!!
    val fileAst: CompilationUnit = try {
        JAVA_PARSER.parse(userSourceCode).throwIfFailed()
    } catch (e: ParseProblemException) {
        throw RuntimeException("Failed to parse code:\n" +
        throw parseFailed(cause = e)
    }

    fun <T> ParseResult<T>.throwIfFailed(): T {
        if (problems.isNotEmpty()) {
            throw parseFailed(
                    desc = this@throwIfFailed.problems.joinToString("\n"),
                    cause = this@throwIfFailed.problems.mapNotNull { it.cause.orElse(null) }.firstOrNull())
        }
        return result.get()
    }

    private fun parseFailed(cause: Throwable? = null, desc: String = ""): RuntimeException {
        return RuntimeException("Failed to parse code:\n" +
                userSourceCode
                        .lines()
                        .mapIndexed { lnNum, ln -> "/*$lnNum*/$ln" }
                        .joinToString("\n"),
                e)
                        .joinToString("\n") + "\n$desc",
                cause)
    }

    val classAst = fileAst.types[0] as ClassOrInterfaceDeclaration
    val nestedClasses = classAst.members.filterIsInstance<ClassOrInterfaceDeclaration>()

+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ class ClassPrinter(
    init {
        val fieldsWithMissingNullablity = fields.filter { field ->
            !field.isPrimitive
                    && Modifier.TRANSIENT !in field.fieldAst.modifiers
                    && field.fieldAst.modifiers.none { it.keyword == Modifier.Keyword.TRANSIENT }
                    && "@$Nullable" !in field.annotations
                    && "@$NonNull" !in field.annotations
        }
+3 −3
Original line number Diff line number Diff line
package com.android.codegen

import com.github.javaparser.JavaParser
import com.github.javaparser.ast.body.FieldDeclaration
import com.github.javaparser.ast.expr.ClassExpr
import com.github.javaparser.ast.expr.Name
@@ -115,8 +114,9 @@ data class FieldInfo(
            classPrinter {
                fieldAst.addAnnotation(SingleMemberAnnotationExpr(
                        Name(ParcelWith),
                        ClassExpr(JavaParser.parseClassOrInterfaceType(
                                "$Parcelling.BuiltIn.For$FieldClass"))))
                        ClassExpr(JAVA_PARSER
                                .parseClassOrInterfaceType("$Parcelling.BuiltIn.For$FieldClass")
                                .throwIfFailed())))
            }
        }
        fieldAst.annotations.map { it.removeComment().toString() }
Loading