Skip to content

Commit 7a0d59c

Browse files
committed
Fix up const-declaration
1 parent d4263d1 commit 7a0d59c

File tree

3 files changed

+15
-25
lines changed

3 files changed

+15
-25
lines changed

lib/src/model.dart

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import 'package:analyzer/source/package_map_resolver.dart';
1919
import 'package:analyzer/source/sdk_ext.dart';
2020
// TODO(jcollins-g): Stop using internal analyzer structures somehow.
2121
import 'package:analyzer/src/context/builder.dart';
22-
import 'package:analyzer/src/dart/constant/value.dart';
2322
import 'package:analyzer/src/dart/element/element.dart';
2423
import 'package:analyzer/src/dart/sdk/sdk.dart';
2524
import 'package:analyzer/src/generated/engine.dart';
@@ -1565,33 +1564,33 @@ abstract class GetterSetterCombo implements ModelElement {
15651564

15661565
Expression get constantInitializer => (element as ConstVariableElement).constantInitializer;
15671566

1568-
String linkifyConstantValue(String constructorName, Element staticElement, String original) {
1567+
String linkifyConstantValue(String original) {
15691568
if (constantInitializer is! InstanceCreationExpression) return original;
15701569
String constructorName = (constantInitializer as InstanceCreationExpression).constructorName.toString();
15711570
Element staticElement = (constantInitializer as InstanceCreationExpression).staticElement;
15721571
Constructor target = new ModelElement.fromElement(staticElement, package);
15731572
Class targetClass = target.enclosingElement;
1573+
// TODO(jcollins-g): this logic really should be integrated into Constructor,
1574+
// but that's not trivial because of linkedName's usage.
1575+
if (targetClass.name == target.name) {
1576+
return original.replaceAll(constructorName, "${target.linkedName}");
1577+
}
15741578
return original.replaceAll(constructorName, "${targetClass.linkedName}.${target.linkedName}");
15751579
}
15761580

15771581
String _constantValueBase;
15781582
String get constantValueBase {
15791583
if (_constantValueBase == null) {
1580-
if (constantInitializer != null) {
1581-
_constantValueBase = const HtmlEscape(HtmlEscapeMode.UNKNOWN).convert(constantInitializer.toString());
1582-
if (constantInitializer is InstanceCreationExpression) {
1583-
_constantValueBase = linkifyConstantValue((constantInitializer as InstanceCreationExpression).constructorName.toString(), (constantInitializer as InstanceCreationExpression).staticElement, _constantValueBase);
1584-
}
1585-
if (_constantValueBase.contains('Stuff'))
1586-
1+1;
1587-
}
1584+
_constantValueBase = constantInitializer?.toString();
1585+
if (_constantValueBase == null) _constantValueBase = '';
1586+
_constantValueBase =
1587+
const HtmlEscape(HtmlEscapeMode.UNKNOWN).convert(_constantValueBase);
15881588
}
15891589
return _constantValueBase;
15901590
}
15911591

1592-
String get constantValue => constantValueBase;
1593-
1594-
String get constantValueTruncated => truncateString(constantValueBase, 200);
1592+
String get constantValue => linkifyConstantValue(constantValueBase);
1593+
String get constantValueTruncated => linkifyConstantValue(truncateString(constantValueBase, 200));
15951594

15961595
/// Returns true if both accessors are synthetic.
15971596
bool get hasSyntheticAccessors {

test/model_test.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1877,7 +1877,6 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
18771877
cat,
18781878
orangeConstant,
18791879
prettyColorsConstant,
1880-
stuffConstant,
18811880
deprecated;
18821881

18831882
Field aStaticConstField, aName;
@@ -1889,8 +1888,6 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
18891888
exLibrary.constants.firstWhere((c) => c.name == 'COLOR_ORANGE');
18901889
prettyColorsConstant =
18911890
exLibrary.constants.firstWhere((c) => c.name == 'PRETTY_COLORS');
1892-
stuffConstant =
1893-
fakeLibrary.constants.firstWhere((c) => c.name == 'STUFF');
18941891
cat = exLibrary.constants.firstWhere((c) => c.name == 'MY_CAT');
18951892
deprecated =
18961893
exLibrary.constants.firstWhere((c) => c.name == 'deprecated');
@@ -1902,7 +1899,7 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
19021899

19031900
test('substrings of the constant values type are not linked (#1535)', () {
19041901
expect(aName.constantValue,
1905-
'const ExtendedShortName("hello there")');
1902+
'const <a href="ex/ExtendedShortName/ExtendedShortName.html">ExtendedShortName</a>(&quot;hello there&quot;)');
19061903
});
19071904

19081905
test('constant field values are escaped', () {
@@ -1934,8 +1931,8 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
19341931
"const &lt;String&gt; [COLOR_GREEN, COLOR_ORANGE, &#39;blue&#39;]");
19351932
});
19361933

1937-
test('MY_CAT is not linked', () {
1938-
expect(cat.constantValue, 'const ConstantCat(&#39;tabby&#39;)');
1934+
test('MY_CAT is linked', () {
1935+
expect(cat.constantValue, 'const <a href="ex/ConstantCat/ConstantCat.html">ConstantCat</a>(&#39;tabby&#39;)');
19391936
});
19401937

19411938
test('exported property', () {

testing/test_package/lib/fake.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -595,12 +595,6 @@ class SpecialList<E> extends ListBase<E> {
595595
void operator []=(int index, E value) {}
596596
}
597597

598-
class AClassWithConstConstructor {
599-
const AClassWithConstConstructor.Stuff(String one, String two);
600-
}
601-
602-
const AClassWithConstConstructor STUFF = const AClassWithConstConstructor.Stuff('one', 'two');
603-
604598
/// This inherits operators.
605599
class ExtraSpecialList<E> extends SpecialList {}
606600

0 commit comments

Comments
 (0)