Closed ajrcarey closed 6 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.
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...
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.
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.)
Thanks! I appreciate the offer. We do have logging, but nothing quite that fine grained.
assumed stale
Dartanalyzer appears trapped in an infinite loop while analyzing the following file:
(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.)