Changeset 1145
- Timestamp:
- 04/30/08 23:58:23 (4 months ago)
- Files:
-
- trunk/descent.core/src/descent/core/IJavaProject.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/ISearchRequestor.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/SelectionEngine.java (modified) (4 diffs)
- trunk/descent.core/src/descent/internal/core/InternalSignature.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/core/search/BasicSearchEngine.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/core/search/IRestrictedAccessDeclarationRequestor.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/core/search/indexing/AbstractIndexer.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/core/search/matching/FieldPattern.java (modified) (6 diffs)
- trunk/descent.ui/src/descent/internal/ui/text/java/LazyJavaFieldCompletionProposal.java (modified) (1 diff)
- trunk/descent.ui/src/descent/internal/ui/text/java/LazyJavaTypeCompletionProposal.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/descent.core/src/descent/core/IJavaProject.java
r1067 r1145 1050 1050 */ 1051 1051 int getApiLevel(); 1052 1053 /**1054 * Finds a java element denoted by the given signature.1055 * @param signature the signature of the element1056 * @return the resulting element1057 */1058 IJavaElement findBySignature(String signature);1059 1052 } trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java
r1142 r1145 2995 2995 } 2996 2996 2997 public void acceptField(char[] packageName, char[] name, char[] typeName, char[][] enclosingTypeNames, long modifiers, AccessRestriction accessRestriction) {2998 //if (packageName == null || packageName.length == 0) {2999 //return;3000 //}3001 //3002 //if (isImported(packageName)) {3003 //return;3004 //}3005 //3006 //if (parser.inNewExp) {3007 //return;3008 //}3009 //3010 //// Skip variables if they are not imported2997 public void acceptField(char[] packageName, char[] name, char[] typeName, char[][] enclosingTypeNames, long modifiers, int declarationStart, AccessRestriction accessRestriction) { 2998 if (packageName == null || packageName.length == 0) { 2999 return; 3000 } 3001 3002 if (isImported(packageName)) { 3003 return; 3004 } 3005 3006 if (parser.inNewExp) { 3007 return; 3008 } 3009 3010 // Skip variables if they are not imported 3011 3011 // if ((modifiers & (Flags.AccAlias | Flags.AccTypedef)) == 0 && !isImported(packageName)) { 3012 3012 // return; 3013 3013 // } 3014 // 3015 // // Don't show not imported variables if completing type identifier 3016 // if (isCompletingTypeIdentifier) { 3017 // if ((modifiers & Flags.AccTypedef) == 0 && 3018 // (modifiers & Flags.AccAlias) == 0) { 3019 // return; 3020 // } 3021 // } 3022 // 3023 // if (!isVisible(modifiers, packageName)) { 3024 // return; 3025 // } 3026 // 3027 // char[] fullName = CharOperation.concat(packageName, name, '.'); 3028 // if (knownDeclarations.containsKey(fullName)) { 3029 // return; 3030 // } 3031 // knownDeclarations.put(fullName, this); 3032 // 3033 // CompletionProposal proposal = this.createProposal(CompletionProposal.FIELD_REF, this.actualCompletionPosition); 3034 // 3035 // int relevance = computeBaseRelevance(); 3036 // relevance += computeRelevanceForCaseMatching(currentName, name); 3037 // relevance += computeRelevanceForExpectedType(typeName); 3038 // relevance += R_VAR; 3039 // 3040 // proposal.setCompletion(fullName); 3041 // 3042 // proposal.setName(name); 3043 // 3044 // StringBuilder sig = new StringBuilder(); 3045 // InternalSignature.appendPackageName(packageName, sig); 3046 // sig.append(VARIABLE); 3047 // sig.append(name.length); 3048 // sig.append(name); 3049 // 3050 // // If it's a function pointer or delegate, suggest call 3051 // if (typeName.length >= 2 && 3052 // (typeName[0] == POINTER || typeName[0] == DELEGATE) && 3053 // typeName[1] == FUNCTION) { 3054 // StringBuilder sig2 = new StringBuilder(); 3055 // sig2.append(MODULE); 3056 // sig2.append(packageName.length); 3057 // sig2.append(packageName); 3058 // sig2.append(FUNCTION); 3059 // sig2.append(name.length); 3060 // sig2.append(name); 3061 // sig2.append(typeName, 1, typeName.length - 1); 3062 // suggestTypeFunction(sig2.toString().toCharArray(), name); 3063 // } 3064 // 3065 // proposal.setSignature(sig.toString().toCharArray()); 3066 // proposal.setTypeName(typeName); 3067 // proposal.setFlags(modifiers); 3068 // proposal.setRelevance(relevance); 3069 // proposal.setReplaceRange(this.startPosition - this.offset, this.endPosition - this.offset); 3070 // CompletionEngine.this.requestor.accept(proposal); 3014 3015 // Don't show not imported variables if completing type identifier 3016 if (isCompletingTypeIdentifier) { 3017 if ((modifiers & Flags.AccTypedef) == 0 && 3018 (modifiers & Flags.AccAlias) == 0) { 3019 return; 3020 } 3021 } 3022 3023 if (!isVisible(modifiers, packageName)) { 3024 return; 3025 } 3026 3027 char[] fullName = CharOperation.concat(packageName, name, '.'); 3028 if (knownDeclarations.containsKey(fullName)) { 3029 return; 3030 } 3031 knownDeclarations.put(fullName, this); 3032 3033 CompletionProposal proposal = this.createProposal(CompletionProposal.FIELD_REF, this.actualCompletionPosition, null); 3034 3035 int relevance = computeBaseRelevance(); 3036 relevance += computeRelevanceForCaseMatching(currentName, name); 3037 relevance += computeRelevanceForExpectedType(typeName); 3038 relevance += R_VAR; 3039 3040 proposal.setCompletion(fullName); 3041 proposal.setName(name); 3042 3043 StringBuilder sig = new StringBuilder(); 3044 InternalSignature.appendPackageName(packageName, sig); 3045 3046 char[] declSignature = sig.toString().toCharArray(); 3047 3048 sig.append(VARIABLE); 3049 sig.append(name.length); 3050 sig.append(name); 3051 3052 proposal.setSignature(sig.toString().toCharArray()); 3053 proposal.setTypeSignature(typeName); 3054 proposal.setDeclarationSignature(declSignature); 3055 proposal.setFlags(modifiers); 3056 proposal.setRelevance(relevance); 3057 proposal.setPackageName(packageName); 3058 proposal.declarationStart = declarationStart; 3059 3060 proposal.setReplaceRange(this.startPosition - this.offset, this.endPosition - this.offset); 3061 CompletionEngine.this.requestor.accept(proposal); 3071 3062 } 3072 3063 trunk/descent.core/src/descent/internal/codeassist/ISearchRequestor.java
r1132 r1145 31 31 public void acceptType(char[] packageName, char[] typeName, char[] templateParametersSignature, char[][] enclosingTypeNames, long modifiers, int declarationStart, AccessRestriction accessRestriction); 32 32 33 public void acceptField(char[] packageName, char[] name, char[] typeName, char[][] enclosingTypeNames, long modifiers, AccessRestriction accessRestriction);33 public void acceptField(char[] packageName, char[] name, char[] typeName, char[][] enclosingTypeNames, long modifiers, int declartionStart, AccessRestriction accessRestriction); 34 34 35 35 public void acceptMethod(char[] packageName, char[] name, char[][] enclosingTypeNames, char[] signature, char[] templateParametersSignature, long modifiers, int declarationStart, AccessRestriction accessRestriction); trunk/descent.core/src/descent/internal/codeassist/SelectionEngine.java
r1141 r1145 115 115 116 116 if (parser.commentToken != null) { 117 char[] tok = extractToken(parser.commentToken, offset);117 final char[] tok = extractToken(parser.commentToken, offset); 118 118 if (tok == null) { 119 119 return NO_ELEMENTS; … … 128 128 public void acceptField(char[] packageName, char[] name, 129 129 char[] typeName, char[][] enclosingTypeNames, 130 long modifiers, AccessRestriction accessRestriction) { 131 IJavaElement element = internalSignature.findField( 132 packageName, name); 133 if (element != null) { 134 addJavaElement(element); 135 } 130 long modifiers, int declarationStart, AccessRestriction accessRestriction) { 131 addBinarySearch(packageName, name, declarationStart); 136 132 } 137 133 … … 140 136 char[] templateParametersSignature, 141 137 long modifiers, int declarationStart, AccessRestriction accessRestriction) { 142 IJavaElement element = internalSignature.findMethod( 143 packageName, name, signature); 144 if (element != null) { 145 addJavaElement(element); 146 } 138 139 addBinarySearch(packageName, name, declarationStart); 147 140 } 148 141 … … 155 148 int declarationStart, 156 149 AccessRestriction accessRestriction) { 157 IJavaElement element = internalSignature.findField( 158 packageName, typeName); 159 if (element != null) { 160 addJavaElement(element); 150 151 addBinarySearch(packageName, typeName, declarationStart); 152 } 153 154 private void addBinarySearch(char[] packageName, char[] name, int declarationStart) { 155 if (!CharOperation.equals(tok, name)) { 156 return; 157 } 158 159 try { 160 descent.core.ICompilationUnit unit = internalSignature.getCompilationUnit(new String(packageName)); 161 if (unit != null) { 162 IJavaElement element = internalSignature.binarySearch(unit, declarationStart, declarationStart); 163 if (element != null) { 164 addJavaElement(element); 165 } 166 } 167 } catch (JavaModelException e) { 168 Util.log(e); 161 169 } 162 170 } 171 163 172 }); 164 173 } else { trunk/descent.core/src/descent/internal/core/InternalSignature.java
r1141 r1145 209 209 } 210 210 211 public IJavaElement findType(char[] packageName, char[] typeName) {212 StringBuilder sb = new StringBuilder();213 appendPackageName(packageName, sb);214 sb.append(CLASS);215 appendName(typeName, sb);216 return javaProject.findBySignature(sb.toString());217 }218 219 public IJavaElement findMethod(char[] packageName, char[] methodName, char[] signature) {220 StringBuilder sb = new StringBuilder();221 appendPackageName(packageName, sb);222 sb.append(FUNCTION);223 appendName(methodName, sb);224 sb.append(signature);225 return javaProject.findBySignature(sb.toString());226 }227 228 public IJavaElement findField(char[] packageName, char[] fieldName) {229 StringBuilder sb = new StringBuilder();230 appendPackageName(packageName, sb);231 sb.append(VARIABLE);232 appendName(fieldName, sb);233 return javaProject.findBySignature(sb.toString());234 }235 236 211 public static void appendPackageName(char[] packageName, StringBuilder sb) { 237 212 sb.append(MODULE); trunk/descent.core/src/descent/internal/core/search/BasicSearchEngine.java
r1132 r1145 1354 1354 } else if (record instanceof FieldPattern) { 1355 1355 FieldPattern field = (FieldPattern) record; 1356 nameRequestor.acceptField(record.modifiers, record.pkg, record.simpleName, field.typeName, record.enclosingTypeNames, documentPath, accessRestriction);1356 nameRequestor.acceptField(record.modifiers, record.pkg, record.simpleName, field.typeName, record.enclosingTypeNames, documentPath, field.declarationStart, accessRestriction); 1357 1357 } else if (record instanceof MethodPattern) { 1358 1358 MethodPattern method = (MethodPattern) record; trunk/descent.core/src/descent/internal/core/search/IRestrictedAccessDeclarationRequestor.java
r1132 r1145 21 21 public interface IRestrictedAccessDeclarationRequestor extends IRestrictedAccessTypeRequestor { 22 22 23 public void acceptField(long modifiers, char[] packageName, char[] name, char[] typeName, char[][] enclosingTypeNames, String path, AccessRestriction access);23 public void acceptField(long modifiers, char[] packageName, char[] name, char[] typeName, char[][] enclosingTypeNames, String path, int declarationStart, AccessRestriction access); 24 24 25 25 public void acceptMethod(long modifiers, char[] packageName, char[] name, char[][] enclosingTypeNames, char[] signature, char[] templateParametersSignature, String path, int declarationStart, AccessRestriction access); trunk/descent.core/src/descent/internal/core/search/indexing/AbstractIndexer.java
r1132 r1145 113 113 } 114 114 public void addFieldDeclaration(long modifiers, char[] packageName, char[][] enclosingTypeNames, char[] typeName, char[] fieldName, int declarationStart) { 115 addIndexEntry(FIELD_DECL, FieldPattern.createIndexKey(modifiers, packageName, enclosingTypeNames, fieldName, typeName ));115 addIndexEntry(FIELD_DECL, FieldPattern.createIndexKey(modifiers, packageName, enclosingTypeNames, fieldName, typeName, declarationStart)); 116 116 addTypeReference(typeName); 117 117 } trunk/descent.core/src/descent/internal/core/search/matching/FieldPattern.java
r1028 r1145 28 28 public char[] typeName; 29 29 30 public int declarationStart; 31 30 32 protected static char[][] REF_CATEGORIES = { REF }; 31 33 protected static char[][] REF_AND_DECL_CATEGORIES = { REF, FIELD_DECL }; … … 34 36 /* 35 37 * Create index key for field declaration pattern: 36 * key = fieldName / typeName / packageName / enclosingTypeName / modifiers38 * key = fieldName / typeName / packageName / declarationStart / enclosingTypeName / modifiers 37 39 */ 38 public static char[] createIndexKey(long modifiers, char[] packageName, char[][] enclosingTypeNames, char[] fieldName, char[] typeName) { 40 public static char[] createIndexKey(long modifiers, char[] packageName, char[][] enclosingTypeNames, char[] fieldName, char[] typeName, int declarationStart) { 41 char[] declarationStartChars = String.valueOf(declarationStart).toCharArray(); 42 int declarationStartLength = declarationStartChars.length; 43 39 44 int fieldNameLength = fieldName == null ? 0 : fieldName.length; 40 45 int typeNameLength = typeName == null ? 0 : typeName.length; … … 49 54 } 50 55 51 int resultLength = fieldNameLength + typeNameLength + packageLength + enclosingNamesLength + 6;56 int resultLength = fieldNameLength + typeNameLength + packageLength + declarationStartLength + enclosingNamesLength + 7; 52 57 char[] result = new char[resultLength]; 53 58 int pos = 0; … … 66 71 pos += packageLength; 67 72 } 73 result[pos++] = SEPARATOR; 74 System.arraycopy(declarationStartChars, 0, result, pos, declarationStartLength); 75 pos += declarationStartLength; 68 76 result[pos++] = SEPARATOR; 69 77 if (enclosingTypeNames != null && enclosingNamesLength > 0) { … … 128 136 /* 129 137 * Type entries are encoded as: 130 * simpleTypeName / packageName / enclosingTypeName / modifiers138 * simpleTypeName / packageName / declarationStart, enclosingTypeName / modifiers 131 139 * e.g. Object/java.lang//0 132 140 * e.g. Cloneable/java.lang//512 … … 154 162 this.pkg = TypeDeclarationPattern.internedPackageNames.add(CharOperation.subarray(key, start, slash)); 155 163 } 164 165 start = ++slash; 166 if (key[start] == SEPARATOR) { 167 this.declarationStart = -1; 168 } else { 169 slash = CharOperation.indexOf(SEPARATOR, key, start); 170 // TODO optimize this 171 this.declarationStart = Integer.parseInt(new String(CharOperation.subarray(key, start, slash))); 172 } 156 173 157 174 // Continue key read by the end to decode modifiers trunk/descent.ui/src/descent/internal/ui/text/java/LazyJavaFieldCompletionProposal.java
r1131 r1145 61 61 } else { 62 62 fQualifiedName= String.valueOf(Signature.toCharArray(fProposal.getSignature(), 63 false /* don'tfully qualify names */));63 true /* fully qualify names */)); 64 64 } 65 65 } trunk/descent.ui/src/descent/internal/ui/text/java/LazyJavaTypeCompletionProposal.java
r1132 r1145 86 86 87 87 fQualifiedName= String.valueOf(Signature.toCharArray(sig, 88 true /* don'tfully qualify names */));88 true /* fully qualify names */)); 89 89 90 90 if (firstIndex != -1) {
