Index: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/completion/CompletionEngine.java |
=================================================================== |
--- editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/completion/CompletionEngine.java (revision 16889) |
+++ editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/completion/CompletionEngine.java (working copy) |
@@ -24,6 +24,7 @@ |
import com.google.dart.compiler.ast.DartCascadeExpression; |
import com.google.dart.compiler.ast.DartClass; |
import com.google.dart.compiler.ast.DartClassMember; |
+import com.google.dart.compiler.ast.DartClassTypeAlias; |
import com.google.dart.compiler.ast.DartExprStmt; |
import com.google.dart.compiler.ast.DartExpression; |
import com.google.dart.compiler.ast.DartField; |
@@ -801,6 +802,7 @@ |
if (beforeBrace) { |
int extendsLoc = classSrc.indexOf(C_EXTENDS); |
int implementsLoc = classSrc.indexOf(C_IMPLEMENTS); |
+ int withLoc = -1; |
if (extendsLoc < 0 && implementsLoc < 0) { |
return null; |
} |
@@ -814,7 +816,9 @@ |
if (sc == null) { |
isClassDef = false; // parsing an interface |
} else { |
- if (actualCompletionPosition >= sc.getSourceInfo().getOffset() && implementsLoc < 0) { |
+ withLoc = classSrc.indexOf(C_WITH); |
+ if (actualCompletionPosition >= sc.getSourceInfo().getOffset() && implementsLoc < 0 |
+ && withLoc < 0) { |
return null; |
} |
if (implementsLoc < completionPos || implementsLoc < 0) { |
@@ -925,17 +929,23 @@ |
DartNode parent = node.getParent(); |
if ((node instanceof IdentifierCompleter) |
&& ((IdentifierCompleter) node).getCompletionParsingContext().size() > 4) { |
- DartNode ancestor = parent.getParent().getParent().getParent(); |
- if (ancestor instanceof DartClassMember) { |
- DartClassMember<?> member = (DartClassMember<?>) ancestor; |
- if (member.getModifiers().isConstant()) { |
- // class X { const !; } to be continued with X.init(); |
- proposeTypesForNewParam(); |
+ DartNode ancestor = parent.getParent(); |
+ if (ancestor instanceof DartClassTypeAlias) { |
+ proposeTypesForPrefix(node, false); |
+ return null; |
+ } else { |
+ ancestor = ancestor.getParent().getParent(); |
+ if (ancestor instanceof DartClassMember) { |
+ DartClassMember<?> member = (DartClassMember<?>) ancestor; |
+ if (member.getModifiers().isConstant()) { |
+ // class X { const !; } to be continued with X.init(); |
+ proposeTypesForNewParam(); |
+ return null; |
+ } |
+ } else if (isCompletionAfterQuery(node)) { |
+ createCompletionsForParameterNames(node, node); |
return null; |
} |
- } else if (isCompletionAfterQuery(node)) { |
- createCompletionsForParameterNames(node, node); |
- return null; |
} |
} else if (isCompletionAfterCascade()) { |
if (node.getSourceInfo().getOffset() - 1 == actualCompletionPosition) { |
@@ -1709,6 +1719,7 @@ |
private LibraryElement currentLib; |
private static final String C_EXTENDS = "extends"; |
+ private static final String C_WITH = "with"; |
private static final String C_IMPLEMENTS = "implements"; |
private static final char[] DYNAMIC_CA = "dynamic".toCharArray(); |
private static final boolean DEBUG = "true".equalsIgnoreCase(Platform.getDebugOption("com.google.dart.tools.ui/debug/CompletionEngine")); |