Changeset 1173
- Timestamp:
- 05/24/08 19:51:37 (5 months ago)
- Files:
-
- trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java (modified) (5 diffs)
- trunk/descent.core/src/descent/internal/codeassist/RelevanceConstants.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/complete/CompletionOnClassDeclaration.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/complete/CompletionParser.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/compiler/SourceElementParser.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/ClassDeclaration.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/FuncDeclaration.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/InterfaceDeclaration.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/IsExp.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/Parser.java (modified) (10 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/SemanticContext.java (modified) (1 diff)
- trunk/descent.ui/src/descent/internal/ui/text/java/OverrideCompletionProposal.java (added)
- trunk/descent.ui/src/descent/ui/text/java/CompletionProposalCollector.java (modified) (4 diffs)
- trunk/descent.unittest/src/descent/internal/unittest/launcher/UnittestLaunchConfiguration.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java
r1161 r1173 1 1 package descent.internal.codeassist; 2 2 3 import java.util.ArrayList; 3 4 import java.util.HashMap; 4 5 import java.util.List; … … 1342 1343 rootScope = scope; 1343 1344 1345 boolean wantOverrides = node instanceof CompletionOnClassDeclaration && ((CompletionOnClassDeclaration) node).isCompletingScope; 1346 1344 1347 if (baseClassIndex == -1) { 1345 1348 currentName = CharOperation.NO_CHAR; … … 1348 1351 1349 1352 completeScope(rootScope, INCLUDE_ALL); 1353 1354 if (wantOverrides) { 1355 List<FuncDeclaration> funcs = new ArrayList<FuncDeclaration>(); 1356 1357 // Suggest override of the function if its virtual 1358 // and it's not from this class 1359 for(Object obj : node.vtbl) { 1360 if (obj instanceof FuncDeclaration) { 1361 FuncDeclaration fd = (FuncDeclaration) obj; 1362 if (fd.parent != node) { 1363 suggestOverride(fd); 1364 } 1365 1366 funcs.add(fd); 1367 } 1368 } 1369 1370 // Also suggest interfaces methods, but only if these 1371 // are not already present in this class 1372 for(BaseClass bc : node.vtblInterfaces) { 1373 TypeClass tc = (TypeClass) bc.type; 1374 loop: 1375 for(Dsymbol member : tc.sym.members) { 1376 if (member instanceof FuncDeclaration) { 1377 FuncDeclaration fd = (FuncDeclaration) member; 1378 for(FuncDeclaration old : funcs) { 1379 if (ASTDmdNode.equals(fd.ident, old.ident)) { 1380 int cov = fd.type.covariant(old.type, semanticContext); 1381 if(cov == 1) { 1382 continue loop; 1383 } 1384 } 1385 } 1386 1387 suggestOverride(fd); 1388 } 1389 } 1390 } 1391 } 1350 1392 } else { 1351 1393 completeNode(node.baseclasses.get(baseClassIndex).type); … … 1353 1395 } 1354 1396 } 1355 1397 1356 1398 private void completeSuperDotExp(CompletionOnSuperDotExp node) throws JavaModelException { 1357 1399 doSemantic(); … … 1848 1890 suggestIntegralProperties(enumDeclaration.getSignature().toCharArray()); 1849 1891 } 1892 } 1893 1894 private void suggestOverride(FuncDeclaration fd) { 1895 CompletionProposal proposal = createProposal(CompletionProposal.METHOD_DECLARATION, this.actualCompletionPosition, fd); 1896 1897 int relevance = computeBaseRelevance(); 1898 relevance += computeRelevanceForInterestingProposal(); 1899 relevance += computeRelevanceForCaseMatching(currentName, fd.ident.ident); 1900 relevance += R_METHOD_OVERIDE; 1901 1902 proposal.setName(fd.ident.ident); 1903 1904 handleMethodCompletion(proposal, fd.ident.ident); 1905 1906 proposal.setSignature(fd.getSignature().toCharArray()); 1907 proposal.setTypeSignature(fd.type.getSignature().toCharArray()); 1908 proposal.setDeclarationSignature(fd.parent.getSignature().toCharArray()); 1909 proposal.setRelevance(relevance); 1910 proposal.setReplaceRange(this.startPosition - this.offset, this.endPosition - this.offset); 1911 CompletionEngine.this.requestor.accept(proposal); 1850 1912 } 1851 1913 trunk/descent.core/src/descent/internal/codeassist/RelevanceConstants.java
r1131 r1173 35 35 int R_NAME_SUFFIX = 3; 36 36 int R_NAME_LESS_NEW_CHARACTERS = 15; 37 int R_METHOD_OVERIDE = 3 ;37 int R_METHOD_OVERIDE = 30; 38 38 int R_NON_RESTRICTED = 3; 39 39 int R_TRUE_OR_FALSE = 40; trunk/descent.core/src/descent/internal/codeassist/complete/CompletionOnClassDeclaration.java
r1136 r1173 12 12 public Scope theScope; 13 13 public int baseClassIndex = -1; 14 public boolean isCompletingScope = false; 14 15 15 16 public CompletionOnClassDeclaration(Loc loc, IdentifierExp id, trunk/descent.core/src/descent/internal/codeassist/complete/CompletionParser.java
r1147 r1173 14 14 import descent.internal.compiler.parser.CaseStatement; 15 15 import descent.internal.compiler.parser.Chars; 16 import descent.internal.compiler.parser.ClassDeclaration; 16 17 import descent.internal.compiler.parser.CompoundStatement; 17 18 import descent.internal.compiler.parser.ContinueStatement; … … 101 102 @Override 102 103 protected boolean dietParse(FuncDeclaration f) { 103 104 104 // If any argument is being autocompleted, don't skip 105 105 // Same for return type … … 854 854 855 855 @Override 856 protected AggregateDeclaration endAggregateDeclaration(AggregateDeclaration a) { 857 if (a instanceof ClassDeclaration && a.start < cursorLocation && cursorLocation < a.start + a.length) { 858 ClassDeclaration original = (ClassDeclaration) a; 859 CompletionOnClassDeclaration cc = new CompletionOnClassDeclaration(original.loc, original.ident, original.baseclasses); 860 cc.members = original.members; 861 cc.sourceMembers = original.sourceMembers; 862 cc.isCompletingScope = true; 863 864 assistNode = cc; 865 return cc; 866 } 867 return super.endAggregateDeclaration(a); 868 } 869 870 @Override 856 871 protected AggregateDeclaration newInterfaceDeclaration(Loc loc, IdentifierExp id, BaseClasses baseClasses) { 857 872 // We don't want assist for an aggregate's name, but we do want it trunk/descent.core/src/descent/internal/compiler/SourceElementParser.java
r1171 r1173 1098 1098 1099 1099 @Override 1100 public void endVisit(PostBlitDeclaration node) { 1101 nodeStack.pop(); 1102 1103 requestor.exitMethod(endOfDeclaration(node), -1, -1); 1104 popLevelInAttribDeclarationStack(); 1105 } 1106 1107 @Override 1100 1108 public void endVisit(CtorDeclaration node) { 1101 1109 nodeStack.pop(); trunk/descent.core/src/descent/internal/compiler/parser/ClassDeclaration.java
r1160 r1173 707 707 Dsymbol s = members.get(i); 708 708 s.semantic(sc, context); 709 710 // Need this for vtbl 711 s.consumeRest(); 709 712 } 710 713 trunk/descent.core/src/descent/internal/compiler/parser/FuncDeclaration.java
r1171 r1173 1065 1065 // Verify this doesn't override previous final function 1066 1066 if (cd.baseClass != null) { 1067 if (ident.toString().equals("callWindowProc")) {1068 System.out.println(1);1069 }1070 1071 1067 Dsymbol s = cd.baseClass.search(loc, ident, 0, context); 1072 1068 if (s != null) { trunk/descent.core/src/descent/internal/compiler/parser/InterfaceDeclaration.java
r1160 r1173 283 283 284 284 for (int j = 0; j < size(members); j++) { 285 members.get(j).semantic(sc, context); 285 Dsymbol s = members.get(j); 286 s.semantic(sc, context); 287 288 // Need this for vtbl 289 s.consumeRest(); 286 290 } 287 291 sc.pop(); trunk/descent.core/src/descent/internal/compiler/parser/IsExp.java
r1160 r1173 19 19 public IsExp(Loc loc, Type targ, IdentifierExp id, TOK tok, Type tspec, 20 20 TOK tok2) { 21 this(loc, targ, id, tok, tspec, tok2, null); 22 } 23 24 public IsExp(Loc loc, Type targ, IdentifierExp id, TOK tok, Type tspec, 25 TOK tok2, TemplateParameters parameters) { 21 26 super(loc, TOK.TOKis); 22 27 this.targ = this.sourceTarg = targ; … … 25 30 this.tspec = this.sourceTspec = tspec; 26 31 this.tok2 = tok2; 32 this.parameters = parameters; 27 33 } 28 34 trunk/descent.core/src/descent/internal/compiler/parser/Parser.java
r1171 r1173 873 873 attachLeadingComments(s); 874 874 } 875 876 // Hook method for subclasses 877 if (s instanceof AggregateDeclaration) { 878 s = endAggregateDeclaration((AggregateDeclaration) s); 879 } 880 875 881 decldefs.add(s); 876 882 } … … 2009 2015 nextToken(); 2010 2016 Dsymbols decl = parseDeclDefs(false); 2017 2011 2018 if (token.value != TOKrcurly) { 2012 2019 parsingErrorInsertTokenAfter(prevToken, "}"); … … 6263 6270 TOK tok = TOKreserved; 6264 6271 TOK tok2 = TOKreserved; 6272 TemplateParameters tpl = null; 6273 Loc loc = this.loc; 6265 6274 6266 6275 nextToken(); … … 6288 6297 || token.value == TOKenum 6289 6298 || token.value == TOKinterface 6299 || (apiLevel == D2 && token.value == TOKconst && peek(token).value == TOKrparen) 6300 || (apiLevel == D2 && token.value == TOKinvariant && peek(token).value == TOKrparen) 6290 6301 || token.value == TOKfunction 6291 6302 || token.value == TOKdelegate || token.value == TOKreturn)) { … … 6301 6312 } 6302 6313 } 6303 check(TOKrparen); 6314 6315 if (apiLevel == D2 && ident != null && tspec != null) { 6316 if (token.value == TOKcomma) 6317 tpl = parseTemplateParameterList(1, null); 6318 else { 6319 tpl = new TemplateParameters(); 6320 check(TOKrparen); 6321 } 6322 TemplateParameter tp = new TemplateTypeParameter(loc, 6323 ident, null, null); 6324 tpl.add(0, tp); 6325 } else { 6326 check(TOKrparen); 6327 } 6304 6328 } else { 6305 6329 parsingErrorInsertToComplete(prevToken, "(type identifier : specialization)", "IftypeDeclaration"); … … 6311 6335 break; 6312 6336 } 6313 e = new IsExp(loc(), targ, ident, tok, tspec, tok2); 6337 if (apiLevel == D2) { 6338 e = new IsExp(loc(), targ, ident, tok, tspec, tok2, tpl); 6339 } else { 6340 e = new IsExp(loc(), targ, ident, tok, tspec, tok2); 6341 } 6314 6342 break; 6315 6343 } … … 6723 6751 case TOKdelegate: 6724 6752 case TOKtypeof: 6753 case TOKfile: 6754 case TOKline: 6725 6755 // CASE_BASIC_TYPES: // (type)int.size 6726 6756 case TOKwchar: … … 6809 6839 FuncLiteralDeclaration fd; 6810 6840 Type t; 6841 boolean isnothrow = false; 6842 boolean ispure = false; 6811 6843 6812 6844 if (token.value == TOKlcurly) { … … 6825 6857 arguments = parseParameters(pointer2_varargs); 6826 6858 varargs = pointer2_varargs[0]; 6859 6860 if (apiLevel == D2) { 6861 while (true) { 6862 if (token.value == TOKpure) 6863 ispure = true; 6864 else if (token.value == TOKnothrow) 6865 isnothrow = true; 6866 else 6867 break; 6868 nextToken(); 6869 } 6870 } 6827 6871 } 6828 6872 6829 6873 t = new TypeFunction(arguments, t, varargs, linkage); 6874 ((TypeFunction) t).ispure = ispure; 6875 ((TypeFunction) t).isnothrow = isnothrow; 6876 6830 6877 fd = new FuncLiteralDeclaration(loc(), t, save, null); 6831 6832 6878 6833 6879 parseContracts(fd); … … 7885 7931 } 7886 7932 7933 protected AggregateDeclaration endAggregateDeclaration(AggregateDeclaration a) { 7934 return a; 7935 } 7936 7887 7937 private Statement dietParseStatement(FuncDeclaration f) { 7888 7938 if (diet) { trunk/descent.core/src/descent/internal/compiler/parser/SemanticContext.java
r1161 r1173 85 85 86 86 public final ASTNodeEncoder encoder; 87 public boolean alwaysResolveFunctionSemanticRest; 87 88 private final List<ASTDmdNode> templateEvaluationStack; 88 89 trunk/descent.ui/src/descent/ui/text/java/CompletionProposalCollector.java
r1104 r1173 44 44 import descent.internal.ui.text.java.GetterSetterCompletionProposal; 45 45 import descent.internal.ui.text.java.JavaCompletionProposal; 46 import descent.internal.ui.text.java.JavaMethodCompletionProposal;47 46 import descent.internal.ui.text.java.JavaTemplateCompletionProposal; 48 47 import descent.internal.ui.text.java.JavaTemplatedFunctionCompletionProposal; … … 52 51 import descent.internal.ui.text.java.LazyJavaTypeCompletionProposal; 53 52 import descent.internal.ui.text.java.MethodCompletionProposal; 53 import descent.internal.ui.text.java.MethodProposalInfo; 54 import descent.internal.ui.text.java.OverrideCompletionProposal; 54 55 import descent.internal.ui.text.java.ProposalContextInformation; 55 56 import descent.internal.ui.viewsupport.ImageDescriptorRegistry; … … 758 759 return null; 759 760 760 return null;761 /* TODO JDT UI override762 761 String name= String.valueOf(proposal.getName()); 763 762 String[] paramTypes= Signature.getParameterTypes(String.valueOf(proposal.getSignature())); 764 763 for (int index= 0; index < paramTypes.length; index++) 765 paramTypes[index]= Signature.toString(paramTypes[index] );764 paramTypes[index]= Signature.toString(paramTypes[index], false /* don't fully qualiffy names */); 766 765 int start= proposal.getReplaceStart(); 767 766 int length= getLength(proposal); … … 776 775 fSuggestedMethodNames.add(new String(name)); 777 776 return javaProposal; 778 */779 777 } 780 778 trunk/descent.unittest/src/descent/internal/unittest/launcher/UnittestLaunchConfiguration.java
r1169 r1173 217 217 private static CoreException error(String message) 218 218 { 219 return new CoreException(new Status(IStatus.ERROR, 220 DescentUnittestPlugin.PLUGIN_ID, message)); 219 return new CoreException(new Status(IStatus.ERROR, DescentUnittestPlugin.PLUGIN_ID, IStatus.ERROR, message, null)); 221 220 } 222 221
