dart-lang / sdk

The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.
https://dart.dev
BSD 3-Clause "New" or "Revised" License
10.09k stars 1.56k forks source link

Dartanalyzer hangs processing file #27796

Closed ajrcarey closed 6 years ago

ajrcarey commented 7 years ago

Dartanalyzer appears trapped in an infinite loop while analyzing the following file:

import 'package:duet/foundation/annotation.dart';
import 'package:duet/foundation/enum.dart';

@immutable
class enumFlag
extends Object
with EnumMixin<enumFlag>
implements Enum<enumFlag> {

  final int value;

  static final enumFlag AD_ANDORRA = new enumFlag._(0);
  static final enumFlag AE_UNITED_ARAB_EMIRATES = new enumFlag._(1);
  static final enumFlag AF_AFGHANISTAN = new enumFlag._(2);
  static final enumFlag AG_ANTIGUA = new enumFlag._(3);
  static final enumFlag AI_ANGUILLA = new enumFlag._(4);
  static final enumFlag AL_ALBANIA = new enumFlag._(5);
  static final enumFlag AM_ARMENIA = new enumFlag._(6);
  static final enumFlag AN_NETHERLANDS_ANTILLES = new enumFlag._(7);
  static final enumFlag AO_ANGOLA = new enumFlag._(8);
  static final enumFlag AR_ARGENTINA = new enumFlag._(9);
  static final enumFlag AS_AMERICAN_SAMOA = new enumFlag._(10);
  static final enumFlag AT_AUSTRIA = new enumFlag._(11);
  static final enumFlag AU_AUSTRALIA = new enumFlag._(12);
  static final enumFlag AW_ARUBA = new enumFlag._(13);
  static final enumFlag AX_ALAND_ISLANDS = new enumFlag._(14);
  static final enumFlag AZ_AZERBAIJAN = new enumFlag._(15);
  static final enumFlag BA_BOSNIA = new enumFlag._(16);
  static final enumFlag BB_BARBADOS = new enumFlag._(17);
  static final enumFlag BD_BANGLADESH = new enumFlag._(18);
  static final enumFlag BE_BELGIUM = new enumFlag._(19);
  static final enumFlag BF_BURKINA_FASO = new enumFlag._(20);
  static final enumFlag BG_BULGARIA = new enumFlag._(21);
  static final enumFlag BH_BAHRAIN = new enumFlag._(22);
  static final enumFlag BI_BURUNDI = new enumFlag._(23);
  static final enumFlag BJ_BENIN = new enumFlag._(24);
  static final enumFlag BM_BERMUDA = new enumFlag._(25);
  static final enumFlag BN_BRUNEI = new enumFlag._(26);
  static final enumFlag BO_BOLIVIA = new enumFlag._(27);
  static final enumFlag BR_BRAZIL = new enumFlag._(28);
  static final enumFlag BS_BAHAMAS = new enumFlag._(29);
  static final enumFlag BT_BHUTAN = new enumFlag._(30);
  static final enumFlag BV_BOUVET_ISLAND = new enumFlag._(31);
  static final enumFlag BW_BOTSWANA = new enumFlag._(32);
  static final enumFlag BY_BELARUS = new enumFlag._(33);
  static final enumFlag BZ_BELIZE = new enumFlag._(34);
  static final enumFlag CA_CANADA = new enumFlag._(35);
  static final enumFlag CC_COCOS_ISLANDS = new enumFlag._(36);
  static final enumFlag CD_CONGO = new enumFlag._(37);
  static final enumFlag CF_CENTRAL_AFRICAN_REPUBLIC = new enumFlag._(38);
  static final enumFlag CG_CONGO_BRAZZAVILLE = new enumFlag._(39);
  static final enumFlag CH_SWITZERLAND = new enumFlag._(40);
  static final enumFlag CI_COTE_DIVOIRE = new enumFlag._(41);
  static final enumFlag CK_COOK_ISLANDS = new enumFlag._(42);
  static final enumFlag CL_CHILE = new enumFlag._(43);
  static final enumFlag CM_CAMEROON = new enumFlag._(44);
  static final enumFlag CN_CHINA = new enumFlag._(45);
  static final enumFlag CO_COLOMBIA = new enumFlag._(46);
  static final enumFlag CR_COSTA_RICA = new enumFlag._(47);
  static final enumFlag CS_SERBIA = new enumFlag._(48);
  static final enumFlag CU_CUBA = new enumFlag._(49);
  static final enumFlag CV_CAPE_VERDE = new enumFlag._(50);
  static final enumFlag CX_CHRISTMAS_ISLAND = new enumFlag._(51);
  static final enumFlag CY_CYPRUS = new enumFlag._(52);
  static final enumFlag CZ_CZECH_REPUBLIC = new enumFlag._(53);
  static final enumFlag DE_GERMANY = new enumFlag._(54);
  static final enumFlag DJ_DJIBOUTI = new enumFlag._(55);
  static final enumFlag DK_DENMARK = new enumFlag._(56);
  static final enumFlag DM_DOMINICA = new enumFlag._(57);
  static final enumFlag DO_DOMINICAN_REPUBLIC = new enumFlag._(58);
  static final enumFlag DZ_ALGERIA = new enumFlag._(59);
  static final enumFlag EC_ECUADOR = new enumFlag._(60);
  static final enumFlag EE_ESTONIA = new enumFlag._(61);
  static final enumFlag EG_EGYPT = new enumFlag._(62);
  static final enumFlag EH_WESTERN_SAHARA = new enumFlag._(63);
  static final enumFlag ER_ERITREA = new enumFlag._(64);
  static final enumFlag ES_SPAIN = new enumFlag._(65);
  static final enumFlag ET_ETHIOPIA = new enumFlag._(66);
  static final enumFlag EU_EUROPEAN_UNION = new enumFlag._(67);
  static final enumFlag FI_FINLAND = new enumFlag._(68);
  static final enumFlag FJ_FIJI = new enumFlag._(69);
  static final enumFlag FK_FALKLAND_ISLANDS = new enumFlag._(70);
  static final enumFlag FM_MICRONESIA = new enumFlag._(71);
  static final enumFlag FO_FAROE_ISLANDS = new enumFlag._(72);
  static final enumFlag FR_FRANCE = new enumFlag._(73);
  static final enumFlag GA_GABON = new enumFlag._(74);
  static final enumFlag GB_UNITED_KINGDOM = new enumFlag._(75);
  static final enumFlag GB_SCT_SCOTLAND = new enumFlag._(76);
  static final enumFlag GB_WLS_WALES = new enumFlag._(77);
  static final enumFlag GD_GRENADA = new enumFlag._(78);
  static final enumFlag GE_GEORGIA = new enumFlag._(79);
  static final enumFlag GF_FRENCH_GUIANA = new enumFlag._(80);
  static final enumFlag GH_GHANA = new enumFlag._(81);
  static final enumFlag GI_GIBRALTAR = new enumFlag._(82);
  static final enumFlag GL_GREENLAND = new enumFlag._(83);
  static final enumFlag GM_GAMBIA = new enumFlag._(84);
  static final enumFlag GN_GUINEA = new enumFlag._(85);
  static final enumFlag GP_GUADELOUPE = new enumFlag._(86);
  static final enumFlag GQ_EQUATORIAL_GUINEA = new enumFlag._(87);
  static final enumFlag GR_GREECE = new enumFlag._(88);
  static final enumFlag GS_SANDWICH_ISLANDS = new enumFlag._(89);
  static final enumFlag GT_GUATEMALA = new enumFlag._(90);
  static final enumFlag GU_GUAM = new enumFlag._(91);
  static final enumFlag GW_GUINEA_BISSAU = new enumFlag._(92);
  static final enumFlag GY_GUYANA = new enumFlag._(93);
  static final enumFlag HK_HONG_KONG = new enumFlag._(94);
  static final enumFlag HM_HEARD_ISLAND = new enumFlag._(95);
  static final enumFlag HN_HONDURAS = new enumFlag._(96);
  static final enumFlag HR_CROATIA = new enumFlag._(97);
  static final enumFlag HT_HAITI = new enumFlag._(98);
  static final enumFlag HU_HUNGARY = new enumFlag._(99);
  static final enumFlag ID_INDONESIA = new enumFlag._(100);
  static final enumFlag IE_IRELAND = new enumFlag._(101);
  static final enumFlag IL_ISRAEL = new enumFlag._(102);
  static final enumFlag IN_INDIA = new enumFlag._(103);
  static final enumFlag IO_INDIAN_OCEAN_TERRITORY = new enumFlag._(104);
  static final enumFlag IQ_IRAQ = new enumFlag._(105);
  static final enumFlag IR_IRAN = new enumFlag._(106);
  static final enumFlag IS_ICELAND = new enumFlag._(107);
  static final enumFlag IT_ITALY = new enumFlag._(108);
  static final enumFlag JM_JAMAICA = new enumFlag._(109);
  static final enumFlag JO_JORDAN = new enumFlag._(110);
  static final enumFlag JP_JAPAN = new enumFlag._(111);
  static final enumFlag KE_KENYA = new enumFlag._(112);
  static final enumFlag KG_KYRGYZSTAN = new enumFlag._(113);
  static final enumFlag KH_CAMBODIA = new enumFlag._(114);
  static final enumFlag KI_KIRIBATI = new enumFlag._(115);
  static final enumFlag KM_COMOROS = new enumFlag._(116);
  static final enumFlag KN_SAINT_KITTS_AND_NEVIS = new enumFlag._(117);
  static final enumFlag KP_NORTH_KOREA = new enumFlag._(118);
  static final enumFlag KR_SOUTH_KOREA = new enumFlag._(119);
  static final enumFlag KW_KUWAIT = new enumFlag._(120);
  static final enumFlag KY_CAYMAN_ISLANDS = new enumFlag._(121);
  static final enumFlag KZ_KAZAKHSTAN = new enumFlag._(122);
  static final enumFlag LA_LAOS = new enumFlag._(123);
  static final enumFlag LB_LEBANON = new enumFlag._(124);
  static final enumFlag LC_SAINT_LUCIA = new enumFlag._(125);
  static final enumFlag LI_LIECHTENSTEIN = new enumFlag._(126);
  static final enumFlag LK_SRI_LANKA = new enumFlag._(127);
  static final enumFlag LR_LIBERIA = new enumFlag._(128);
  static final enumFlag LS_LESOTHO = new enumFlag._(129);
  static final enumFlag LT_LITHUANIA = new enumFlag._(130);
  static final enumFlag LU_LUXEMBOURG = new enumFlag._(131);
  static final enumFlag LV_LATVIA = new enumFlag._(132);
  static final enumFlag LY_LIBYA = new enumFlag._(133);
  static final enumFlag MA_MOROCCO = new enumFlag._(134);
  static final enumFlag MC_MONACO = new enumFlag._(135);
  static final enumFlag MD_MOLDOVA = new enumFlag._(136);
  static final enumFlag ME_MONTENEGRO = new enumFlag._(137);
  static final enumFlag MG_MADAGASCAR = new enumFlag._(138);
  static final enumFlag MH_MARSHALL_ISLANDS = new enumFlag._(139);
  static final enumFlag MK_MACEDONIA = new enumFlag._(140);
  static final enumFlag ML_MALI = new enumFlag._(141);
  static final enumFlag MM_BURMA_MYANMAR = new enumFlag._(142);
  static final enumFlag MN_MONGOLIA = new enumFlag._(143);
  static final enumFlag MO_MACAU = new enumFlag._(144);
  static final enumFlag MP_NORTHERN_MARIANA_ISLANDS = new enumFlag._(145);
  static final enumFlag MQ_MARTINIQUE = new enumFlag._(146);
  static final enumFlag MR_MAURITIANIA = new enumFlag._(147);
  static final enumFlag MS_MONTSERRAT = new enumFlag._(148);
  static final enumFlag MT_MALTA = new enumFlag._(149);
  static final enumFlag MU_MAURITIUS = new enumFlag._(150);
  static final enumFlag MV_MALDIVES = new enumFlag._(151);
  static final enumFlag MW_MALAWI = new enumFlag._(152);
  static final enumFlag MX_MEXICO = new enumFlag._(153);
  static final enumFlag MY_MALAYSIA = new enumFlag._(154);
  static final enumFlag MZ_MOZAMBIQUE = new enumFlag._(155);
  static final enumFlag NA_NAMIBIA = new enumFlag._(156);
  static final enumFlag NC_NEW_CALEDONIA = new enumFlag._(157);
  static final enumFlag NE_NIGER = new enumFlag._(158);
  static final enumFlag NF_NORFOLK_ISLAND = new enumFlag._(159);
  static final enumFlag NG_NIGERIA = new enumFlag._(160);
  static final enumFlag NI_NICARAGUA = new enumFlag._(161);
  static final enumFlag NL_NETHERLANDS = new enumFlag._(162);
  static final enumFlag NO_NORWAY = new enumFlag._(163);
  static final enumFlag NP_NEPAL = new enumFlag._(164);
  static final enumFlag NR_NAURU = new enumFlag._(165);
  static final enumFlag NU_NIUE = new enumFlag._(166);
  static final enumFlag NZ_NEW_ZEALAND = new enumFlag._(167);
  static final enumFlag OM_OMAN = new enumFlag._(168);
  static final enumFlag PA_PANAMA = new enumFlag._(169);
  static final enumFlag PE_PERU = new enumFlag._(170);
  static final enumFlag PF_FRENCH_POLYNESIA = new enumFlag._(171);
  static final enumFlag PG_NEW_GUINEA = new enumFlag._(172);
  static final enumFlag PH_PHILIPPINES = new enumFlag._(173);
  static final enumFlag PK_PAKISTAN = new enumFlag._(174);
  static final enumFlag PL_POLAND = new enumFlag._(175);
  static final enumFlag PM_SAINT_PIERRE = new enumFlag._(176);
  static final enumFlag PN_PITCAIRN_ISLANDS = new enumFlag._(177);
  static final enumFlag PR_PUERTO_RICO = new enumFlag._(178);
  static final enumFlag PS_PALESTINE = new enumFlag._(179);
  static final enumFlag PT_PORTUGAL = new enumFlag._(180);
  static final enumFlag PW_PALAU = new enumFlag._(181);
  static final enumFlag PY_PARAGUAY = new enumFlag._(182);
  static final enumFlag QA_QATAR = new enumFlag._(183);
  static final enumFlag RE_REUNION = new enumFlag._(184);
  static final enumFlag RO_ROMANIA = new enumFlag._(185);
  static final enumFlag RS_SERBIA = new enumFlag._(186);
  static final enumFlag RU_RUSSIA = new enumFlag._(187);
  static final enumFlag RW_RWANDA = new enumFlag._(188);
  static final enumFlag SA_SAUDI_ARABIA = new enumFlag._(189);
  static final enumFlag SB_SOLOMON_ISLANDS = new enumFlag._(190);
  static final enumFlag SC_SEYCHELLES = new enumFlag._(191);
  static final enumFlag SD_SUDAN = new enumFlag._(192);
  static final enumFlag SE_SWEDEN = new enumFlag._(193);
  static final enumFlag SG_SINGAPORE = new enumFlag._(194);
  static final enumFlag SH_SAINT_HELENA = new enumFlag._(195);
  static final enumFlag SI_SLOVENIA = new enumFlag._(196);
  static final enumFlag SJ_JAN_MAYEN_SVALBARD = new enumFlag._(197);
  static final enumFlag SK_SLOVAKIA = new enumFlag._(198);
  static final enumFlag SL_SIERRA_LEONE = new enumFlag._(199);
  static final enumFlag SM_SAN_MARINO = new enumFlag._(200);
  static final enumFlag SN_SENEGAL = new enumFlag._(201);
  static final enumFlag SO_SOMALIA = new enumFlag._(202);
  static final enumFlag SR_SURINAME = new enumFlag._(203);
  static final enumFlag ST_SAO_TOME = new enumFlag._(204);
  static final enumFlag SV_EL_SALVADOR = new enumFlag._(205);
  static final enumFlag SY_SYRIA = new enumFlag._(206);
  static final enumFlag SZ_SWAZILAND = new enumFlag._(207);
  static final enumFlag TC_CAICOS_ISLANDS = new enumFlag._(208);
  static final enumFlag TD_CHAD = new enumFlag._(209);
  static final enumFlag TF_FRENCH_TERRITORIES = new enumFlag._(210);
  static final enumFlag TG_TOGO = new enumFlag._(211);
  static final enumFlag TH_THAILAND = new enumFlag._(212);
  static final enumFlag TJ_TAJIKISTAN = new enumFlag._(213);
  static final enumFlag TK_TOKELAU = new enumFlag._(214);
  static final enumFlag TL_TIMORLESTE = new enumFlag._(215);
  static final enumFlag TM_TURKMENISTAN = new enumFlag._(216);
  static final enumFlag TN_TUNISIA = new enumFlag._(217);
  static final enumFlag TO_TONGA = new enumFlag._(218);
  static final enumFlag TR_TURKEY = new enumFlag._(219);
  static final enumFlag TT_TRINIDAD = new enumFlag._(220);
  static final enumFlag TV_TUVALU = new enumFlag._(221);
  static final enumFlag TW_TAIWAN = new enumFlag._(222);
  static final enumFlag TZ_TANZANIA = new enumFlag._(223);
  static final enumFlag UA_UKRAINE = new enumFlag._(224);
  static final enumFlag UG_UGANDA = new enumFlag._(225);
  static final enumFlag UM_US_MINOR_ISLANDS = new enumFlag._(226);
  static final enumFlag US_UNITED_STATES_OF_AMERICA = new enumFlag._(227);
  static final enumFlag UY_URUGUAY = new enumFlag._(228);
  static final enumFlag UZ_UZBEKISTAN = new enumFlag._(229);
  static final enumFlag VA_VATICAN_CITY = new enumFlag._(230);
  static final enumFlag VC_SAINT_VINCENT = new enumFlag._(231);
  static final enumFlag VE_VENEZUELA = new enumFlag._(232);
  static final enumFlag VG_BRITISH_VIRGIN_ISLANDS = new enumFlag._(233);
  static final enumFlag VI_US_VIRGIN_ISLANDS = new enumFlag._(234);
  static final enumFlag VN_VIETNAM = new enumFlag._(235);
  static final enumFlag VU_VANUATU = new enumFlag._(236);
  static final enumFlag WF_WALLIS_AND_FUTUNA = new enumFlag._(237);
  static final enumFlag WS_SAMOA = new enumFlag._(238);
  static final enumFlag YE_YEMEN = new enumFlag._(239);
  static final enumFlag YT_MAYOTTE = new enumFlag._(240);
  static final enumFlag ZA_SOUTH_AFRICA = new enumFlag._(241);
  static final enumFlag ZM_ZAMBIA = new enumFlag._(242);
  static final enumFlag ZW_ZIMBABWE = new enumFlag._(243);

  enumFlag._(this.value);

  String toISO3166CountryCode() {
    if (this == enumFlag.AD_ANDORRA) {
      return "ad";
    } else if (this == enumFlag.AE_UNITED_ARAB_EMIRATES) {
      return "ae";
    } else if (this == enumFlag.AF_AFGHANISTAN) {
      return "af";
    } else if (this == enumFlag.AG_ANTIGUA) {
      return "ag";
    } else if (this == enumFlag.AI_ANGUILLA) {
      return "ai";
    } else if (this == enumFlag.AL_ALBANIA) {
      return "al";
    } else if (this == enumFlag.AM_ARMENIA) {
      return "am";
    } else if (this == enumFlag.AN_NETHERLANDS_ANTILLES) {
      return "an";
    } else if (this == enumFlag.AO_ANGOLA) {
      return "ao";
    } else if (this == enumFlag.AR_ARGENTINA) {
      return "ar";
    } else if (this == enumFlag.AS_AMERICAN_SAMOA) {
      return "as";
    } else if (this == enumFlag.AT_AUSTRIA) {
      return "at";
    } else if (this == enumFlag.AU_AUSTRALIA) {
      return "au";
    } else if (this == enumFlag.AW_ARUBA) {
      return "aw";
    } else if (this == enumFlag.AX_ALAND_ISLANDS) {
      return "ax";
    } else if (this == enumFlag.AZ_AZERBAIJAN) {
      return "az";
    } else if (this == enumFlag.BA_BOSNIA) {
      return "ba";
    } else if (this == enumFlag.BB_BARBADOS) {
      return "bb";
    } else if (this == enumFlag.BD_BANGLADESH) {
      return "bd";
    } else if (this == enumFlag.BE_BELGIUM) {
      return "be";
    } else if (this == enumFlag.BF_BURKINA_FASO) {
      return "bf";
    } else if (this == enumFlag.BG_BULGARIA) {
      return "bg";
    } else if (this == enumFlag.BH_BAHRAIN) {
      return "bh";
    } else if (this == enumFlag.BI_BURUNDI) {
      return "bi";
    } else if (this == enumFlag.BJ_BENIN) {
      return "bj";
    } else if (this == enumFlag.BM_BERMUDA) {
      return "bm";
    } else if (this == enumFlag.BN_BRUNEI) {
      return "bn";
    } else if (this == enumFlag.BO_BOLIVIA) {
      return "bo";
    } else if (this == enumFlag.BR_BRAZIL) {
      return "br";
    } else if (this == enumFlag.BS_BAHAMAS) {
      return "bs";
    } else if (this == enumFlag.BT_BHUTAN) {
      return "bt";
    } else if (this == enumFlag.BV_BOUVET_ISLAND) {
      return "bv";
    } else if (this == enumFlag.BW_BOTSWANA) {
      return "bw";
    } else if (this == enumFlag.BY_BELARUS) {
      return "by";
    } else if (this == enumFlag.BZ_BELIZE) {
      return "bz";
    } else if (this == enumFlag.CA_CANADA) {
      return "ca";
    } else if (this == enumFlag.CC_COCOS_ISLANDS) {
      return "cc";
    } else if (this == enumFlag.CD_CONGO) {
      return "cd";
    } else if (this == enumFlag.CF_CENTRAL_AFRICAN_REPUBLIC) {
      return "cf";
    } else if (this == enumFlag.CG_CONGO_BRAZZAVILLE) {
      return "cg";
    } else if (this == enumFlag.CH_SWITZERLAND) {
      return "ch";
    } else if (this == enumFlag.CI_COTE_DIVOIRE) {
      return "ci";
    } else if (this == enumFlag.CK_COOK_ISLANDS) {
      return "ck";
    } else if (this == enumFlag.CL_CHILE) {
      return "cl";
    } else if (this == enumFlag.CM_CAMEROON) {
      return "cm";
    } else if (this == enumFlag.CN_CHINA) {
      return "cn";
    } else if (this == enumFlag.CO_COLOMBIA) {
      return "co";
    } else if (this == enumFlag.CR_COSTA_RICA) {
      return "cr";
    } else if (this == enumFlag.CS_SERBIA) {
      return "cs";
    } else if (this == enumFlag.CU_CUBA) {
      return "cu";
    } else if (this == enumFlag.CV_CAPE_VERDE) {
      return "cv";
    } else if (this == enumFlag.CX_CHRISTMAS_ISLAND) {
      return "cx";
    } else if (this == enumFlag.CY_CYPRUS) {
      return "cy";
    } else if (this == enumFlag.CZ_CZECH_REPUBLIC) {
      return "cz";
    } else if (this == enumFlag.DE_GERMANY) {
      return "de";
    } else if (this == enumFlag.DJ_DJIBOUTI) {
      return "dj";
    } else if (this == enumFlag.DK_DENMARK) {
      return "dk";
    } else if (this == enumFlag.DM_DOMINICA) {
      return "dm";
    } else if (this == enumFlag.DO_DOMINICAN_REPUBLIC) {
      return "do";
    } else if (this == enumFlag.DZ_ALGERIA) {
      return "dz";
    } else if (this == enumFlag.EC_ECUADOR) {
      return "ec";
    } else if (this == enumFlag.EE_ESTONIA) {
      return "ee";
    } else if (this == enumFlag.EG_EGYPT) {
      return "eg";
    } else if (this == enumFlag.EH_WESTERN_SAHARA) {
      return "eh";
    } else if (this == enumFlag.ER_ERITREA) {
      return "er";
    } else if (this == enumFlag.ES_SPAIN) {
      return "es";
    } else if (this == enumFlag.ET_ETHIOPIA) {
      return "et";
    } else if (this == enumFlag.EU_EUROPEAN_UNION) {
      return "eu";
    } else if (this == enumFlag.FI_FINLAND) {
      return "fi";
    } else if (this == enumFlag.FJ_FIJI) {
      return "fj";
    } else if (this == enumFlag.FK_FALKLAND_ISLANDS) {
      return "fk";
    } else if (this == enumFlag.FM_MICRONESIA) {
      return "fm";
    } else if (this == enumFlag.FO_FAROE_ISLANDS) {
      return "fo";
    } else if (this == enumFlag.FR_FRANCE) {
      return "fr";
    } else if (this == enumFlag.GA_GABON) {
      return "ga";
    } else if (this == enumFlag.GB_UNITED_KINGDOM) {
      return "gb";
    } else if (this == enumFlag.GB_SCT_SCOTLAND) {
      return "gb sct";
    } else if (this == enumFlag.GB_WLS_WALES) {
      return "gb wls";
    } else if (this == enumFlag.GD_GRENADA) {
      return "gd";
    } else if (this == enumFlag.GE_GEORGIA) {
      return "ge";
    } else if (this == enumFlag.GF_FRENCH_GUIANA) {
      return "gf";
    } else if (this == enumFlag.GH_GHANA) {
      return "gh";
    } else if (this == enumFlag.GI_GIBRALTAR) {
      return "gi";
    } else if (this == enumFlag.GL_GREENLAND) {
      return "gl";
    } else if (this == enumFlag.GM_GAMBIA) {
      return "gm";
    } else if (this == enumFlag.GN_GUINEA) {
      return "gn";
    } else if (this == enumFlag.GP_GUADELOUPE) {
      return "gp";
    } else if (this == enumFlag.GQ_EQUATORIAL_GUINEA) {
      return "gq";
    } else if (this == enumFlag.GR_GREECE) {
      return "gr";
    } else if (this == enumFlag.GS_SANDWICH_ISLANDS) {
      return "gs";
    } else if (this == enumFlag.GT_GUATEMALA) {
      return "gt";
    } else if (this == enumFlag.GU_GUAM) {
      return "gu";
    } else if (this == enumFlag.GW_GUINEA_BISSAU) {
      return "gw";
    } else if (this == enumFlag.GY_GUYANA) {
      return "gy";
    } else if (this == enumFlag.HK_HONG_KONG) {
      return "hk";
    } else if (this == enumFlag.HM_HEARD_ISLAND) {
      return "hm";
    } else if (this == enumFlag.HN_HONDURAS) {
      return "hn";
    } else if (this == enumFlag.HR_CROATIA) {
      return "hr";
    } else if (this == enumFlag.HT_HAITI) {
      return "ht";
    } else if (this == enumFlag.HU_HUNGARY) {
      return "hu";
    } else if (this == enumFlag.ID_INDONESIA) {
      return "id";
    } else if (this == enumFlag.IE_IRELAND) {
      return "ie";
    } else if (this == enumFlag.IL_ISRAEL) {
      return "il";
    } else if (this == enumFlag.IN_INDIA) {
      return "in";
    } else if (this == enumFlag.IO_INDIAN_OCEAN_TERRITORY) {
      return "io";
    } else if (this == enumFlag.IQ_IRAQ) {
      return "iq";
    } else if (this == enumFlag.IR_IRAN) {
      return "ir";
    } else if (this == enumFlag.IS_ICELAND) {
      return "is";
    } else if (this == enumFlag.IT_ITALY) {
      return "it";
    } else if (this == enumFlag.JM_JAMAICA) {
      return "jm";
    } else if (this == enumFlag.JO_JORDAN) {
      return "jo";
    } else if (this == enumFlag.JP_JAPAN) {
      return "jp";
    } else if (this == enumFlag.KE_KENYA) {
      return "ke";
    } else if (this == enumFlag.KG_KYRGYZSTAN) {
      return "kg";
    } else if (this == enumFlag.KH_CAMBODIA) {
      return "kh";
    } else if (this == enumFlag.KI_KIRIBATI) {
      return "ki";
    } else if (this == enumFlag.KM_COMOROS) {
      return "km";
    } else if (this == enumFlag.KN_SAINT_KITTS_AND_NEVIS) {
      return "kn";
    } else if (this == enumFlag.KP_NORTH_KOREA) {
      return "kp";
    } else if (this == enumFlag.KR_SOUTH_KOREA) {
      return "kr";
    } else if (this == enumFlag.KW_KUWAIT) {
      return "kw";
    } else if (this == enumFlag.KY_CAYMAN_ISLANDS) {
      return "ky";
    } else if (this == enumFlag.KZ_KAZAKHSTAN) {
      return "kz";
    } else if (this == enumFlag.LA_LAOS) {
      return "la";
    } else if (this == enumFlag.LB_LEBANON) {
      return "lb";
    } else if (this == enumFlag.LC_SAINT_LUCIA) {
      return "lc";
    } else if (this == enumFlag.LI_LIECHTENSTEIN) {
      return "li";
    } else if (this == enumFlag.LK_SRI_LANKA) {
      return "lk";
    } else if (this == enumFlag.LR_LIBERIA) {
      return "lr";
    } else if (this == enumFlag.LS_LESOTHO) {
      return "ls";
    } else if (this == enumFlag.LT_LITHUANIA) {
      return "lt";
    } else if (this == enumFlag.LU_LUXEMBOURG) {
      return "lu";
    } else if (this == enumFlag.LV_LATVIA) {
      return "lv";
    } else if (this == enumFlag.LY_LIBYA) {
      return "ly";
    } else if (this == enumFlag.MA_MOROCCO) {
      return "ma";
    } else if (this == enumFlag.MC_MONACO) {
      return "mc";
    } else if (this == enumFlag.MD_MOLDOVA) {
      return "md";
    } else if (this == enumFlag.ME_MONTENEGRO) {
      return "me";
    } else if (this == enumFlag.MG_MADAGASCAR) {
      return "mg";
    } else if (this == enumFlag.MH_MARSHALL_ISLANDS) {
      return "mh";
    } else if (this == enumFlag.MK_MACEDONIA) {
      return "mk";
    } else if (this == enumFlag.ML_MALI) {
      return "ml";
    } else if (this == enumFlag.MM_BURMA_MYANMAR) {
      return "mm";
    } else if (this == enumFlag.MN_MONGOLIA) {
      return "mn";
    } else if (this == enumFlag.MO_MACAU) {
      return "mo";
    } else if (this == enumFlag.MP_NORTHERN_MARIANA_ISLANDS) {
      return "mp";
    } else if (this == enumFlag.MQ_MARTINIQUE) {
      return "mq";
    } else if (this == enumFlag.MR_MAURITIANIA) {
      return "mr";
    } else if (this == enumFlag.MS_MONTSERRAT) {
      return "ms";
    } else if (this == enumFlag.MT_MALTA) {
      return "mt";
    } else if (this == enumFlag.MU_MAURITIUS) {
      return "mu";
    } else if (this == enumFlag.MV_MALDIVES) {
      return "mv";
    } else if (this == enumFlag.MW_MALAWI) {
      return "mw";
    } else if (this == enumFlag.MX_MEXICO) {
      return "mx";
    } else if (this == enumFlag.MY_MALAYSIA) {
      return "my";
    } else if (this == enumFlag.MZ_MOZAMBIQUE) {
      return "mz";
    } else if (this == enumFlag.NA_NAMIBIA) {
      return "na";
    } else if (this == enumFlag.NC_NEW_CALEDONIA) {
      return "nc";
    } else if (this == enumFlag.NE_NIGER) {
      return "ne";
    } else if (this == enumFlag.NF_NORFOLK_ISLAND) {
      return "nf";
    } else if (this == enumFlag.NG_NIGERIA) {
      return "ng";
    } else if (this == enumFlag.NI_NICARAGUA) {
      return "ni";
    } else if (this == enumFlag.NL_NETHERLANDS) {
      return "nl";
    } else if (this == enumFlag.NO_NORWAY) {
      return "no";
    } else if (this == enumFlag.NP_NEPAL) {
      return "np";
    } else if (this == enumFlag.NR_NAURU) {
      return "nr";
    } else if (this == enumFlag.NU_NIUE) {
      return "nu";
    } else if (this == enumFlag.NZ_NEW_ZEALAND) {
      return "nz";
    } else if (this == enumFlag.OM_OMAN) {
      return "om";
    } else if (this == enumFlag.PA_PANAMA) {
      return "pa";
    } else if (this == enumFlag.PE_PERU) {
      return "pe";
    } else if (this == enumFlag.PF_FRENCH_POLYNESIA) {
      return "pf";
    } else if (this == enumFlag.PG_NEW_GUINEA) {
      return "pg";
    } else if (this == enumFlag.PH_PHILIPPINES) {
      return "ph";
    } else if (this == enumFlag.PK_PAKISTAN) {
      return "pk";
    } else if (this == enumFlag.PL_POLAND) {
      return "pl";
    } else if (this == enumFlag.PM_SAINT_PIERRE) {
      return "pm";
    } else if (this == enumFlag.PN_PITCAIRN_ISLANDS) {
      return "pn";
    } else if (this == enumFlag.PR_PUERTO_RICO) {
      return "pr";
    } else if (this == enumFlag.PS_PALESTINE) {
      return "ps";
    } else if (this == enumFlag.PT_PORTUGAL) {
      return "pt";
    } else if (this == enumFlag.PW_PALAU) {
      return "pw";
    } else if (this == enumFlag.PY_PARAGUAY) {
      return "py";
    } else if (this == enumFlag.QA_QATAR) {
      return "qa";
    } else if (this == enumFlag.RE_REUNION) {
      return "re";
    } else if (this == enumFlag.RO_ROMANIA) {
      return "ro";
    } else if (this == enumFlag.RS_SERBIA) {
      return "rs";
    } else if (this == enumFlag.RU_RUSSIA) {
      return "ru";
    } else if (this == enumFlag.RW_RWANDA) {
      return "rw";
    } else if (this == enumFlag.SA_SAUDI_ARABIA) {
      return "sa";
    } else if (this == enumFlag.SB_SOLOMON_ISLANDS) {
      return "sb";
    } else if (this == enumFlag.SC_SEYCHELLES) {
      return "sc";
    } else if (this == enumFlag.SD_SUDAN) {
      return "sd";
    } else if (this == enumFlag.SE_SWEDEN) {
      return "se";
    } else if (this == enumFlag.SG_SINGAPORE) {
      return "sg";
    } else if (this == enumFlag.SH_SAINT_HELENA) {
      return "sh";
    } else if (this == enumFlag.SI_SLOVENIA) {
      return "si";
    } else if (this == enumFlag.SJ_JAN_MAYEN_SVALBARD) {
      return "sj";
    } else if (this == enumFlag.SK_SLOVAKIA) {
      return "sk";
    } else if (this == enumFlag.SL_SIERRA_LEONE) {
      return "sl";
    } else if (this == enumFlag.SM_SAN_MARINO) {
      return "sm";
    } else if (this == enumFlag.SN_SENEGAL) {
      return "sn";
    } else if (this == enumFlag.SO_SOMALIA) {
      return "so";
    } else if (this == enumFlag.SR_SURINAME) {
      return "sr";
    } else if (this == enumFlag.ST_SAO_TOME) {
      return "st";
    } else if (this == enumFlag.SV_EL_SALVADOR) {
      return "sv";
    } else if (this == enumFlag.SY_SYRIA) {
      return "sy";
    } else if (this == enumFlag.SZ_SWAZILAND) {
      return "sz";
    } else if (this == enumFlag.TC_CAICOS_ISLANDS) {
      return "tc";
    } else if (this == enumFlag.TD_CHAD) {
      return "td";
    } else if (this == enumFlag.TF_FRENCH_TERRITORIES) {
      return "tf";
    } else if (this == enumFlag.TG_TOGO) {
      return "tg";
    } else if (this == enumFlag.TH_THAILAND) {
      return "th";
    } else if (this == enumFlag.TJ_TAJIKISTAN) {
      return "tj";
    } else if (this == enumFlag.TK_TOKELAU) {
      return "tk";
    } else if (this == enumFlag.TL_TIMORLESTE) {
      return "tl";
    } else if (this == enumFlag.TM_TURKMENISTAN) {
      return "tm";
    } else if (this == enumFlag.TN_TUNISIA) {
      return "tn";
    } else if (this == enumFlag.TO_TONGA) {
      return "to";
    } else if (this == enumFlag.TR_TURKEY) {
      return "tr";
    } else if (this == enumFlag.TT_TRINIDAD) {
      return "tt";
    } else if (this == enumFlag.TV_TUVALU) {
      return "tv";
    } else if (this == enumFlag.TW_TAIWAN) {
      return "tw";
    } else if (this == enumFlag.TZ_TANZANIA) {
      return "tz";
    } else if (this == enumFlag.UA_UKRAINE) {
      return "ua";
    } else if (this == enumFlag.UG_UGANDA) {
      return "ug";
    } else if (this == enumFlag.UM_US_MINOR_ISLANDS) {
      return "um";
    } else if (this == enumFlag.US_UNITED_STATES_OF_AMERICA) {
      return "us";
    } else if (this == enumFlag.UY_URUGUAY) {
      return "uy";
    } else if (this == enumFlag.UZ_UZBEKISTAN) {
      return "uz";
    } else if (this == enumFlag.VA_VATICAN_CITY) {
      return "va";
    } else if (this == enumFlag.VC_SAINT_VINCENT) {
      return "vc";
    } else if (this == enumFlag.VE_VENEZUELA) {
      return "ve";
    } else if (this == enumFlag.VG_BRITISH_VIRGIN_ISLANDS) {
      return "vg";
    } else if (this == enumFlag.VI_US_VIRGIN_ISLANDS) {
      return "vi";
    } else if (this == enumFlag.VN_VIETNAM) {
      return "vn";
    } else if (this == enumFlag.VU_VANUATU) {
      return "vu";
    } else if (this == enumFlag.WF_WALLIS_AND_FUTUNA) {
      return "wf";
    } else if (this == enumFlag.WS_SAMOA) {
      return "ws";
    } else if (this == enumFlag.YE_YEMEN) {
      return "ye";
    } else if (this == enumFlag.YT_MAYOTTE) {
      return "yt";
    } else if (this == enumFlag.ZA_SOUTH_AFRICA) {
      return "za";
    } else if (this == enumFlag.ZM_ZAMBIA) {
      return "zm";
    } else if (this == enumFlag.ZW_ZIMBABWE) {
      return "zw";
    } else {
      throw new UnimplementedError();
    }
  }

}

(The file is generated automatically, not typed by hand.)

This is on Ubuntu 16.10 with dartanalyzer 1.20.1. The problem did not occur in 1.19.

If it is helpful to provide the imported annotations and enum package, I am happy to do so. (The code predates the inclusion of native Dart enums, so uses an older pattern for enums.)

bwilkerson commented 7 years ago

Some initial experimentation suggests that this is running into a limit related to the fact that we are using a recursive descent parser. Essentially, each 'if' statement is pushing a new context on the stack and we are probably exceeding the stack depth.

As a work-around, which will also produce more performant code, I would suggest changing your generator so that it generates code that looks more like this:

@immutable
class enumFlag
extends Object
with EnumMixin<enumFlag>
implements Enum<enumFlag> {
  final int value;
  final String countryCode;

  static final enumFlag AD_ANDORRA = new enumFlag._(0, "ad");

  enumFlag._(this.value, this.countryCode);

  String toISO3166CountryCode() => countryCode;
}

I realize that might not be possible, but that's what comes to mind.

ajrcarey commented 7 years ago

Yes, I can certainly adjust the code generator that produces this file. That's no problem, and your suggested change is actually a code improvement.

However, I wouldn't be so delighted if, every time a version change to the dart analyzer introduced a regression, I had to rewrite my code...

bwilkerson commented 7 years ago

Sorry, I missed the implication that this is a regression. As far as I can remember, the parser did not appreciably change between 1.19 and 1.20, so it's possible that my initial hypothesis is wrong.

You're absolutely right: you shouldn't need to re-write your code because of bugs in analyzer. I was merely trying to help you make progress without having to wait for the next release.

What I do know is that

So, it's possible that the problem causing it to hang has been fixed in the latest code base, but it looks like analyzer would still have trouble analyzing the code. I'm not sure what would have changed that would have caused this problem to appear.

ajrcarey commented 7 years ago

I understand. There's definitely no problem in 1.19 as that is what I am using right now (I had to revert from 1.20 because of this problem; I will switch back once I have adjusted the code generator).

If there's a way I can generate logs for you so you can compare the differences between 1.19 and 1.20, I'm happy to do that; I just need some directions.

(I probably should have mentioned before that this is all with strong mode switched on; not sure if that makes any difference.)

bwilkerson commented 7 years ago

Thanks! I appreciate the offer. We do have logging, but nothing quite that fine grained.

devoncarew commented 6 years ago

assumed stale