| #!/bin/bash -- | |
| # | |
| # Generates dart_model definitions from `_fe_analyzer_shared` code. | |
| # | |
| # TODO(davidmorgan): this is intended to be single use code: delete if we don't | |
| # need it again, convert to Dart if we do. | |
| # | |
| # mkdir /tmp/inputs | |
| # cp ~/git/dart-sdk/sdk/pkg/_fe_analyzer_shared/lib/src/metadata/* /tmp/inputs | |
| # rm /tmp/inputs/proto.dart /tmp/inputs/parser.dart /tmp/inputs/scope.dart /tmp/inputs/evaluate.dart | |
| # tool/generate_definitions /tmp/inputs | |
| path="$1" | |
| source=$(find $path -name \*.dart | xargs cat) | |
| IFS=$'\n' | |
| echo "final definitions = [" | |
| # Unions. | |
| for union in $( | |
| echo "$source" \ | |
| | grep 'sealed class' \ | |
| | sed -e s'#sealed class ##' \ | |
| | sed -e 's# {##' \ | |
| | sort); do | |
| echo "Definition.union('$union'," | |
| echo " createInBuffer: true," | |
| echo " description: ''," | |
| echo " types: [" | |
| for type in $(echo "$source" \ | |
| | grep "extends $union" \ | |
| | sed -e 's#abstract ##' \ | |
| | sed -e 's#class ##' \ | |
| | sed -e 's# extends .*##'); do | |
| echo " '$type'," | |
| done | |
| echo " ]," | |
| echo " properties: []," | |
| echo "),"; | |
| done | |
| # Enums. | |
| for type in $(echo "$source" \ | |
| | grep -E '^enum [A-Z]' \ | |
| | sed -e 's#enum ##' \ | |
| | sed -e 's# .*##' \ | |
| | sort); do | |
| echo "Definition.\$enum('$type'," | |
| echo " description: ''," | |
| echo " values: [" | |
| for line in $(echo "$source" \ | |
| | grep -A1000000 "enum $type " \ | |
| | tail -n +2); do | |
| if echo "$line" | grep -q -e ';' -e '}'; then | |
| break | |
| else | |
| value=$(echo $line | sed -e 's# ##' | sed -e 's#(.*##' | sed -e 's#,##') | |
| echo " '$value'," | |
| fi | |
| done | |
| echo " ]," | |
| echo ")," | |
| done | |
| # Classes. | |
| for type in $(echo "$source" \ | |
| | grep -E '^[a-z ]*class ' \ | |
| | grep -v 'sealed' \ | |
| | sed -e 's#abstract ##' \ | |
| | sed -e 's#class ##' \ | |
| | sed -e 's# extends .*##' \ | |
| | sed -e 's# {##' \ | |
| | sort); do | |
| echo "Definition.clazz('$type'," | |
| echo " createInBuffer: true," | |
| echo " description: ''," | |
| echo " properties: [" | |
| for line in $(echo "$source" \ | |
| | grep -A1000000 "class $type extends" \ | |
| | tail -n +2); do | |
| if echo "$line" | grep -q ' final'; then | |
| field_name=$(echo $line | sed -e 's# final ##' | sed -e 's#.* ##' | sed -e 's#;##') | |
| if test "$field_name" == "unresolved"; then | |
| continue | |
| fi | |
| field_type=$(echo $line | sed -e 's# final ##' | sed -e 's# .*##') | |
| if echo "$field_type" | grep -F -q '?'; then | |
| field_type=$(echo "$field_type" | sed -e 's#?##') | |
| echo " Property('$field_name', type: '$field_type', description: '', nullable: true)," | |
| else | |
| echo " Property('$field_name', type: '$field_type', description: '')," | |
| fi | |
| elif echo "$line" | grep -q ' get '; then | |
| field_name=$(echo $line | sed -e 's#.* get ##' | sed -e 's#;##') | |
| if test "$field_name" == "unresolved"; then | |
| continue | |
| fi | |
| field_type=$(echo $line | sed -e 's# ##' | sed -e 's# get .*##') | |
| if echo "$field_type" | grep -F -q '?'; then | |
| field_type=$(echo "$field_type" | sed -e 's#?##') | |
| echo " Property('$field_name', type: '$field_type', description: '', nullable: true)," | |
| else | |
| echo " Property('$field_name', type: '$field_type', description: '')," | |
| fi | |
| else | |
| break | |
| fi | |
| done | |
| echo " ]," | |
| echo ")," | |
| done | |
| echo "];" |