Changeset 1138

Show
Ignore:
Timestamp:
04/29/08 20:55:47 (6 months ago)
Author:
asterite
Message:

Now semantic analysis is only done when necessary in code selection. Fixed a bug that kept a proposal context info in setters floating around. Now the builder checks if the operation was canceled, and quickly aborts.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/descent.core/src/descent/internal/codeassist/SelectionEngine.java

    r1132 r1138  
    162162                module.moduleName = sourceUnit.getFullyQualifiedName(); 
    163163 
    164                 context = CompilationUnitResolver.resolve(module, javaProject, 
    165                         owner); 
    166  
    167164                long time2 = System.currentTimeMillis(); 
    168165                module.accept(this); 
     
    180177        } 
    181178    } 
     179     
     180    private void doSemantic() { 
     181        if (context == null) { 
     182            try { 
     183                context = CompilationUnitResolver.resolve(module, javaProject, 
     184                        owner); 
     185            } catch (JavaModelException e) { 
     186                Util.log(e); 
     187            } 
     188        } 
     189    } 
    182190 
    183191    private char[] extractToken(Token token, int offset) { 
     
    229237    public boolean visit(Module node) { 
    230238        // Don't visit template instances in the module scope 
    231         for (Dsymbol symbol : node.members) { 
    232             Dsymbol dsymbol = symbol; 
     239        int length = node.members.size(); 
     240        for (int i = 0; i < length; i++) { 
     241            Dsymbol dsymbol = node.members.get(i); 
    233242            if (null == dsymbol.isTemplateInstance()) { 
    234243                dsymbol.accept(this); 
     
    313322            return false; 
    314323        } 
     324         
     325        doSemantic(); 
    315326 
    316327        if (node.resolvedSymbol != null) { 
     
    366377    public boolean visit(Import node) { 
    367378        if (isInRange(node.id)) { 
     379            doSemantic(); 
     380             
    368381            Module mod = node.mod; 
    369382            if (mod != null) { 
     
    392405    @Override 
    393406    public boolean visit(Argument node) { 
    394         if (node.var != null && isInRange(node.ident)) { 
    395             if (node.var instanceof VarDeclaration) { 
    396                 add((VarDeclaration) node.var); 
    397             } else if (node.var instanceof AliasDeclaration) { 
    398                 add((AliasDeclaration) node.var); 
    399             } else if (node.var instanceof TypedefDeclaration) { 
    400                 add((TypedefDeclaration) node.var); 
     407        if (isInRange(node.ident)) { 
     408            doSemantic(); 
     409            if (node.var != null) { 
     410                if (node.var instanceof VarDeclaration) { 
     411                    add((VarDeclaration) node.var); 
     412                } else if (node.var instanceof AliasDeclaration) { 
     413                    add((AliasDeclaration) node.var); 
     414                } else if (node.var instanceof TypedefDeclaration) { 
     415                    add((TypedefDeclaration) node.var); 
     416                } 
    401417            } 
    402418            return false; 
     
    407423    @Override 
    408424    public boolean visit(NewExp node) { 
    409         if (isInRange(node.sourceNewtype) && node.member != null) { 
    410             CtorDeclaration ctor = node.member; 
    411             if (ctor.getJavaElement() != null) { 
    412                 addJavaElement(ctor.getJavaElement()); 
    413             } else { 
    414                 addBinarySearch(ctor); 
     425        if (isInRange(node.sourceNewtype)) { 
     426            doSemantic(); 
     427             
     428            if (node.member != null) { 
     429                CtorDeclaration ctor = node.member; 
     430                if (ctor.getJavaElement() != null) { 
     431                    addJavaElement(ctor.getJavaElement()); 
     432                } else { 
     433                    addBinarySearch(ctor); 
     434                } 
    415435            } 
    416436            return false; 
     
    471491 
    472492    private void add(VarDeclaration node) { 
     493        doSemantic(); 
     494         
    473495        if (node.getJavaElement() != null) { 
    474496            addJavaElement(node.getJavaElement()); 
     
    481503 
    482504    private void add(AliasDeclaration node) { 
     505        doSemantic(); 
     506         
    483507        if (node.getJavaElement() != null) { 
    484508            addJavaElement(node.getJavaElement()); 
     
    491515 
    492516    private void add(TypedefDeclaration node) { 
     517        doSemantic(); 
     518         
    493519        if (node.getJavaElement() != null) { 
    494520            addJavaElement(node.getJavaElement()); 
  • trunk/descent.core/src/descent/internal/compiler/parser/TemplateDeclaration.java

    r1137 r1138  
    854854        buf.writestring(ident.toChars()); 
    855855        buf.writeByte('('); 
    856         for (int i = 0; i < parameters.size(); i++) { 
    857             TemplateParameter tp = parameters.get(i); 
    858             if (i != 0) { 
    859                 buf.writeByte(','); 
    860             } 
    861             tp.toCBuffer(buf, hgs, context); 
     856        if (parameters != null) { 
     857            for (int i = 0; i < parameters.size(); i++) { 
     858                TemplateParameter tp = parameters.get(i); 
     859                if (i != 0) { 
     860                    buf.writeByte(','); 
     861                } 
     862                tp.toCBuffer(buf, hgs, context); 
     863            } 
    862864        } 
    863865        buf.writeByte(')'); 
  • trunk/descent.core/src/descent/internal/core/builder/JavaBuilder.java

    r1126 r1138  
    7777        monitor.beginTask("", 100 * resources.length); 
    7878        for(IResource resource : resources) { 
     79            if (monitor.isCanceled()) { 
     80                return; 
     81            } 
     82             
    7983            build(resource, new SubProgressMonitor(monitor, 100)); 
    8084        } 
  • trunk/descent.ui/src/descent/internal/ui/text/java/JavaParameterListValidator.java

    r1132 r1138  
    241241            if (position < line.getOffset() || position >= document.getLength()) 
    242242                return false; 
     243             
     244            boolean isSetter = false; 
     245            int pos = fPosition; 
     246        loop: 
     247            while(pos >= 0) { 
     248                char c = document.getChar(pos); 
     249                switch(c) { 
     250                case '(': 
     251                    break loop; 
     252                case '=': 
     253                    isSetter = true; 
     254                    break loop; 
     255                } 
     256                pos--; 
     257            } 
     258             
     259            if (isSetter) { 
     260                return Character.isJavaIdentifierPart(document.getChar(position)); 
     261            } 
    243262 
    244263            return getCharCount(document, fPosition, position, "(", ")", false) >= 0; //$NON-NLS-1$ //$NON-NLS-2$