Changeset 1145

Show
Ignore:
Timestamp:
04/30/08 23:58:23 (4 months ago)
Author:
asterite
Message:

Now immports are also automatically added for public variable. It seems it was working slow before, but now it's ok. Also, put back selection in comments.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/descent.core/src/descent/core/IJavaProject.java

    r1067 r1145  
    10501050     */ 
    10511051    int getApiLevel(); 
    1052      
    1053     /** 
    1054      * Finds a java element denoted by the given signature. 
    1055      * @param signature the signature of the element 
    1056      * @return the resulting element 
    1057      */ 
    1058     IJavaElement findBySignature(String signature); 
    10591052} 
  • trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java

    r1142 r1145  
    29952995    } 
    29962996     
    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 imported 
     2997    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 
    30113011//      if ((modifiers & (Flags.AccAlias | Flags.AccTypedef)) == 0 && !isImported(packageName)) { 
    30123012//          return; 
    30133013//      } 
    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); 
    30713062    } 
    30723063     
  • trunk/descent.core/src/descent/internal/codeassist/ISearchRequestor.java

    r1132 r1145  
    3131    public void acceptType(char[] packageName, char[] typeName, char[] templateParametersSignature, char[][] enclosingTypeNames, long modifiers, int declarationStart, AccessRestriction accessRestriction); 
    3232     
    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); 
    3434     
    3535    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  
    115115 
    116116            if (parser.commentToken != null) { 
    117                 char[] tok = extractToken(parser.commentToken, offset); 
     117                final char[] tok = extractToken(parser.commentToken, offset); 
    118118                if (tok == null) { 
    119119                    return NO_ELEMENTS; 
     
    128128                    public void acceptField(char[] packageName, char[] name, 
    129129                            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); 
    136132                    } 
    137133 
     
    140136                            char[] templateParametersSignature, 
    141137                            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); 
    147140                    } 
    148141 
     
    155148                            int declarationStart, 
    156149                            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); 
    161169                        } 
    162170                    } 
     171                     
    163172                }); 
    164173            } else { 
  • trunk/descent.core/src/descent/internal/core/InternalSignature.java

    r1141 r1145  
    209209    } 
    210210     
    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      
    236211    public static void appendPackageName(char[] packageName, StringBuilder sb) { 
    237212        sb.append(MODULE); 
  • trunk/descent.core/src/descent/internal/core/search/BasicSearchEngine.java

    r1132 r1145  
    13541354                    } else if (record instanceof FieldPattern) { 
    13551355                        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); 
    13571357                    } else if (record instanceof MethodPattern) { 
    13581358                        MethodPattern method = (MethodPattern) record; 
  • trunk/descent.core/src/descent/internal/core/search/IRestrictedAccessDeclarationRequestor.java

    r1132 r1145  
    2121public interface IRestrictedAccessDeclarationRequestor extends IRestrictedAccessTypeRequestor { 
    2222     
    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); 
    2424     
    2525    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  
    113113    }    
    114114    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)); 
    116116        addTypeReference(typeName); 
    117117    } 
  • trunk/descent.core/src/descent/internal/core/search/matching/FieldPattern.java

    r1028 r1145  
    2828public char[] typeName; 
    2929 
     30public int declarationStart; 
     31 
    3032protected static char[][] REF_CATEGORIES = { REF }; 
    3133protected static char[][] REF_AND_DECL_CATEGORIES = { REF, FIELD_DECL }; 
     
    3436/* 
    3537 * Create index key for field declaration pattern: 
    36  *      key = fieldName / typeName / packageName / enclosingTypeName / modifiers 
     38 *      key = fieldName / typeName / packageName / declarationStart / enclosingTypeName / modifiers 
    3739 */ 
    38 public static char[] createIndexKey(long modifiers, char[] packageName, char[][] enclosingTypeNames, char[] fieldName, char[] typeName) { 
     40public 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     
    3944    int fieldNameLength = fieldName == null ? 0 : fieldName.length; 
    4045    int typeNameLength = typeName == null ? 0 : typeName.length; 
     
    4954    } 
    5055 
    51     int resultLength = fieldNameLength + typeNameLength + packageLength + enclosingNamesLength + 6
     56    int resultLength = fieldNameLength + typeNameLength + packageLength + declarationStartLength + enclosingNamesLength + 7
    5257    char[] result = new char[resultLength]; 
    5358    int pos = 0; 
     
    6671        pos += packageLength; 
    6772    } 
     73    result[pos++] = SEPARATOR; 
     74    System.arraycopy(declarationStartChars, 0, result, pos, declarationStartLength); 
     75    pos += declarationStartLength; 
    6876    result[pos++] = SEPARATOR; 
    6977    if (enclosingTypeNames != null && enclosingNamesLength > 0) { 
     
    128136/* 
    129137 * Type entries are encoded as: 
    130  *  simpleTypeName / packageName / enclosingTypeName / modifiers 
     138 *  simpleTypeName / packageName / declarationStart, enclosingTypeName / modifiers 
    131139 *          e.g. Object/java.lang//0 
    132140 *      e.g. Cloneable/java.lang//512 
     
    154162        this.pkg = TypeDeclarationPattern.internedPackageNames.add(CharOperation.subarray(key, start, slash)); 
    155163    } 
     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    } 
    156173 
    157174    // Continue key read by the end to decode modifiers 
  • trunk/descent.ui/src/descent/internal/ui/text/java/LazyJavaFieldCompletionProposal.java

    r1131 r1145  
    6161            } else { 
    6262                fQualifiedName= String.valueOf(Signature.toCharArray(fProposal.getSignature(), 
    63                         false /* don't fully qualify names */)); 
     63                        true /* fully qualify names */)); 
    6464            } 
    6565        } 
  • trunk/descent.ui/src/descent/internal/ui/text/java/LazyJavaTypeCompletionProposal.java

    r1132 r1145  
    8686                 
    8787                fQualifiedName= String.valueOf(Signature.toCharArray(sig, 
    88                         true /* don't fully qualify names */)); 
     88                        true /* fully qualify names */)); 
    8989                 
    9090                if (firstIndex != -1) {