Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
   *
   * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   * Other names may be trademarks of their respective owners.
   *
   * The contents of this file are subject to the terms of either the GNU
  * General Public License Version 2 only ("GPL") or the Common
  * Development and Distribution License("CDDL") (collectively, the
  * "License"). You may not use this file except in compliance with the
  * License. You can obtain a copy of the License at
  * http://www.netbeans.org/cddl-gplv2.html
  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
  * specific language governing permissions and limitations under the
  * License.  When distributing the software, include this License Header
  * Notice in each file and include the License file at
  * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
  * particular file as subject to the "Classpath" exception as provided
  * by Oracle in the GPL Version 2 section of the License file that
  * accompanied this code. If applicable, add the following below the
  * License Header, with the fields enclosed by brackets [] replaced by
  * your own identifying information:
  * "Portions Copyrighted [year] [name of copyright owner]"
  *
  * Contributor(s):
  *
  * The Original Software is NetBeans. The Initial Developer of the Original
  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
  * Microsystems, Inc. All Rights Reserved.
  *
  * If you wish your version of this file to be governed by only the CDDL
  * or only the GPL Version 2, indicate your decision by adding
  * "[Contributor] elects to include this software in this distribution
  * under the [CDDL or GPL Version 2] license." If you do not indicate a
  * single choice of license, a recipient has the option to distribute
  * your version of this file under either the CDDL, the GPL Version 2 or
  * to extend the choice of license to its licensees as provided above.
  * However, if you add GPL Version 2 code and therefore, elected the GPL
  * Version 2 license, then the option applies only if the new code is
  * made subject to such option by the copyright holder.
  */
 package org.netbeans.modules.java.navigation;
 import java.util.List;
 import java.util.Map;
XXX Remove the ElementScanner class from here it should be wenough to consult the Elements class. It should also permit for showing inherited members.

Author(s):
phrebejk
 
 public class ElementScanningTask implements CancellableTask<CompilationInfo>{
     
     private static final Logger LOG = Logger.getLogger(ElementScanningTask.class.getName());
     private ClassMemberPanelUI ui;
     private final AtomicBoolean canceled = new AtomicBoolean ();
     
     private static final String TYPE_COLOR = "#707070";
     private static final String INHERITED_COLOR = "#7D694A";
     
     public ElementScanningTaskClassMemberPanelUI ui ) {
         this. = ui;
     }
     
     @Override
    public void cancel() {
        //System.out.println("Element task canceled");
        .set(true);
    }
    @Override
    public void run(CompilationInfo infothrows Exception {
        runImpl(infofalse);
    }
    void runImpl(
            @NonNull final CompilationInfo info,
            final boolean userActionthrows Exception {
        .start();
        .set (false); // Task shared for one file needs reset first
        long start = System.currentTimeMillis();        
        
        if (ClassMemberPanel.compareAndSetLastUsedFile(info.getFileObject()) && info.getChangedTree() != null) {
            //method body has been reparsed - no need to update the navigator
            long end = System.currentTimeMillis();
            Logger.getLogger("TIMER").log(."Element Scanning Task"//NOI18N
                    new Object[]{info.getFileObject(), end - start});
            return ;
        }
        
        //System.out.println("The task is running" + info.getFileObject().getNameExt() + "=====================================" ) ;
        
        Description rootDescription = new Description );
        rootDescription.fileObject = info.getFileObject();
        rootDescription.subs = new HashSet<Description>();
        
        // Get all outerclasses in the Compilation unit
        CompilationUnitTree cuTree = info.getCompilationUnit();        
        List<? extends TypeElementelements = info.getTopLevelElements();
        
        final Map<Element,Longpos = new HashMap<Element,Long>();
        if (!.get()) {
            Trees trees = info.getTrees();
            PositionVisitor posVis = new PositionVisitor (trees);
            posVis.scan(cuTreepos);
        }
        final boolean fqn = .getFilters().isFqn();
        if ( !.get() && elements != null) {
            for (Element element : elements) {
                Description topLevel = element2description(elementnullfalseinfoposfqn);
                ifnull != topLevel ) {
                    if (!rootDescription.subs.addtopLevel )) {
                        .log(."Duplicate top level class: {0}"topLevel.name);   //NOI18N
                    }
                    addMembers( (TypeElement)elementtopLevelinfoposfqn);
                }
            }
        }
        
        if ( !.get()) {
            .refresh(rootDescriptionuserAction);
        }
        long end = System.currentTimeMillis();
        Logger.getLogger("TIMER").log(."Element Scanning Task",  //NOI18N
                new Object[] {info.getFileObject(), end - start});
    }
    private static class PositionVisitor extends TreePathScanner<VoidMap<Element,Long>> {
        private final Trees trees;
        private final SourcePositions sourcePositions;
        private final AtomicBoolean canceled;
        private CompilationUnitTree cu;
        public PositionVisitor (final Trees treesfinal AtomicBoolean canceled) {
            assert trees != null;
            assert canceled != null;
            this. = trees;
            this. = trees.getSourcePositions();
            this. = canceled;
        }
        @Override
        public Void visitCompilationUnit(CompilationUnitTree nodeMap<ElementLongp) {
            this. = node;
            return super.visitCompilationUnit(nodep);
        }
        @Override
        public Void visitClass(ClassTree nodeMap<ElementLongp) {
            Element e = this..getElement(this.getCurrentPath());
            if (e != null) {
                long pos = this..getStartPosition(node);
                p.put(epos);
            }
            return super.visitClass(nodep);
        }
        @Override
        public Void visitMethod(MethodTree nodeMap<ElementLongp) {
            Element e = this..getElement(this.getCurrentPath());
            if (e != null) {
                long pos = this..getStartPosition(node);
                p.put(epos);
            }
            return null;
        }
        @Override
        public Void visitVariable(VariableTree nodeMap<ElementLongp) {
            Element e = this..getElement(this.getCurrentPath());
            if (e != null) {
                long pos = this..getStartPosition(node);
                p.put(epos);
            }
            return null;
        }
        @Override
        public Void scan(Tree treeMap<ElementLongp) {
            if (!.get()) {
                return super.scan(treep);
            }
            else {                
                return null;
            }
        }        
    }
     
    private void addMembersfinal TypeElement efinal Description parentDescriptionfinal CompilationInfo infofinal Map<Element,Longposboolean fqn) {
        List<? extends Elementmembers = info.getElements().getAllMemberse );
        forElement m : members ) {
            if.get() )
                return;
            
            Description d = element2description(meparentDescription.isInheritedinfoposfqn);
            ifnull != d ) {
                if (!parentDescription.subs.addd )) {
                    .log(."Duplicate enclosed element: {0}"d.name);   //NOI18N  Should never happen
                }
                ifm instanceof TypeElement && !d.isInherited ) {
                    addMembers( (TypeElement)mdinfoposfqn);
                }
            }
        }
    }
    
    private Description element2description(final Element efinal Element parent,
            final boolean isParentInheritedfinal CompilationInfo info,
            final Map<Element,Longposboolean  fqn) {
        ifinfo.getElementUtilities().isSynthetic(e) )
            return null;
        
        boolean inherited = isParentInherited || (null != parent && !parent.equalse.getEnclosingElement() ));
        final Element encElement = e.getEnclosingElement();
        Description d = new Description(
                ,
                getSimpleName(e),
                ElementHandle.create(e),
                e.getKind(),
                inherited,
                encElement != null && encElement.getKind() == .);
        
        ife instanceof TypeElement ) {
            d.subs = new HashSet<Description>();
            d.htmlHeader = createHtmlHeader(  (TypeElement)einfo.getElements().isDeprecated(e),d.isInheritedfqn );
        } else ife instanceof ExecutableElement ) {
            d.htmlHeader = createHtmlHeader(  (ExecutableElement)einfo.getElements().isDeprecated(e),d.isInheritedfqn );
        } else ife instanceof VariableElement ) {
            if( !(e.getKind() == . || e.getKind() == .) )
                return null;
            d.htmlHeader = createHtmlHeader(  (VariableElement)einfo.getElements().isDeprecated(e),d.isInheritedfqn );
        }
        
        d.modifiers = e.getModifiers();
        d.pos = getPosition(einfopos);
        d.cpInfo = info.getClasspathInfo();
        
        return d;
    }
        
    
    private long getPosition(final Element efinal CompilationInfo infofinal Map<Element,Longpos) {
         Long res = pos.get(e);
         if (res == null) {
            return -1;
         }
         return res.longValue();
    }
    private static String getSimpleName(@NonNull final Element e) {
        if (e.getKind() == .) {
            return e.getEnclosingElement().getSimpleName().toString();
        } else {
            return e.getSimpleName().toString();
        }
    }
        
   
Creates HTML display name of the Executable element
    private String createHtmlHeader(  ExecutableElement eboolean isDeprecated,boolean isInheritedboolean fqn ) {
        StringBuilder sb = new StringBuilder();
        if ( isDeprecated ) {
            sb.append("<s>"); // NOI18N
        }
        ifisInherited ) {
            sb.append"<font color=" +  + ">" ); // NOI18N
        }
        Name name = e.getKind() == . ? e.getEnclosingElement().getSimpleName() : e.getSimpleName();
        sb.append(Utils.escape(name.toString()));        
        if ( isDeprecated ) {
            sb.append("</s>"); // NOI18N
        }
        sb.append("("); // NOI18N
        List<? extends VariableElementparams = e.getParameters();
        forIterator<? extends VariableElementit = params.iterator(); it.hasNext(); ) {
            VariableElement param = it.next(); 
            sb.append"<font color=" +  + ">" ); // NOI18N
            final boolean vararg = !it.hasNext() && e.isVarArgs();
            sb.append(printArg(param.asType(),varargfqn));
            sb.append("</font>"); // NOI18N
            sb.append(" "); // NOI18N
            sb.append(Utils.escape(param.getSimpleName().toString()));
            if ( it.hasNext() ) {
                sb.append(", "); // NOI18N
            }
        }
        sb.append(")"); // NOI18N
        if ( e.getKind() != . ) {
            TypeMirror rt = e.getReturnType();
            if ( rt.getKind() != . ) {                               
                sb.append(" : "); // NOI18N     
                sb.append"<font color=" +  + ">" ); // NOI18N
                sb.append(print(e.getReturnType(), fqn));
                sb.append("</font>"); // NOI18N                    
            }
        }
        return sb.toString();
    }
    private String createHtmlHeader(  VariableElement eboolean isDeprecated,boolean isInheritedboolean fqn) {
        StringBuilder sb = new StringBuilder();
        if ( isDeprecated ) {
            sb.append("<s>"); // NOI18N
        }
        ifisInherited ) {
            sb.append"<font color=" +  + ">" ); // NOI18N
        }
        sb.append(Utils.escape(e.getSimpleName().toString()));
        if ( isDeprecated ) {
            sb.append("</s>"); // NOI18N
        }
        if ( e.getKind() != . ) {
            sb.append" : " ); // NOI18N
            sb.append"<font color=" +  + ">" ); // NOI18N
            sb.append(print(e.asType(), fqn));
            sb.append("</font>"); // NOI18N
        }
        return sb.toString();            
    }
    private String createHtmlHeaderTypeElement eboolean isDeprecatedboolean isInheritedboolean fqn) {
        StringBuilder sb = new StringBuilder();            
        if ( isDeprecated ) {
            sb.append("<s>"); // NOI18N
        }
        ifisInherited ) {
            sb.append"<font color=" +  + ">" ); // NOI18N
        }
        sb.append(Utils.escape(
            fqn?
            e.getQualifiedName().toString():
            e.getSimpleName().toString()));
        if ( isDeprecated ) {
            sb.append("</s>"); // NOI18N
        }
        // sb.append(print(e.asType()));            
        List<? extends TypeParameterElementtypeParams = e.getTypeParameters();
        //System.out.println("Element " + e + "type params" + typeParams.size() );
        if ( typeParams != null && !typeParams.isEmpty() ) {
            sb.append("&lt;"); // NOI18N
            forIterator<? extends TypeParameterElementit = typeParams.iterator(); it.hasNext(); ) {
                TypeParameterElement tp = it.next();
                sb.append( Utils.escape(tp.getSimpleName().toString()) );                    
                try { // XXX Verry ugly -> file a bug against Javac?
                    List<? extends TypeMirrorbounds = tp.getBounds();
                    //System.out.println( tp.getSimpleName() + "   bounds size " + bounds.size() );
                    if ( !bounds.isEmpty() ) {
                        sb.append(printBounds(boundsfqn));
                    }
                }
                catch ( NullPointerException npe ) {
                    ..println("El " + e );
                    npe.printStackTrace();
                }                    
                if ( it.hasNext() ) {
                    sb.append(", "); // NOI18N
                }
            }
            sb.append("&gt;"); // NOI18N
        }
        // Add superclass and implemented interfaces
        TypeMirror sc = e.getSuperclass();
        String scName = printscfqn);
        if ( sc == null || 
             e.getKind() == . ||
             e.getKind() == . ||
             "Object".equals(scName) || // NOI18N
             "<none>".equals(scName)) { // NOI18N
            scName = null;
        }
        List<? extends TypeMirrorifaces = e.getInterfaces();
        if ( ( scName != null || !ifaces.isEmpty() ) &&
              e.getKind() != . ) {
            sb.append" :: " ); // NOI18N
            if (scName != null) {                
                sb.append"<font color=" +  + ">" ); // NOI18N                
                sb.appendscName );
                sb.append("</font>"); // NOI18N
            }
            if ( !ifaces.isEmpty() ) {
                if ( scName != null ) {
                    sb.append" : " ); // NOI18N
                }
                for (Iterator<? extends TypeMirrorit = ifaces.iterator(); it.hasNext();) {
                    TypeMirror typeMirror = it.next();
                    sb.append"<font color=" +  + ">" ); // NOI18N                
                    sb.appendprint(typeMirrorfqn) );
                    sb.append("</font>"); // NOI18N
                    if ( it.hasNext() ) {
                        sb.append(", "); // NOI18N
                    }
                }
            }
        }
        return sb.toString();            
    }
    private String printBoundsList<? extends TypeMirrorboundsboolean fqn) {
        if ( bounds.size() == 1 && "java.lang.Object".equalsbounds.get(0).toString() ) ) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        sb.append" extends " ); // NOI18N
        for (Iterator<? extends TypeMirrorit = bounds.iterator(); it.hasNext();) {
            TypeMirror bound = it.next();
            sb.append(print(boundfqn));
            if ( it.hasNext() ) {
                sb.append(" & " ); // NOI18N
            }
        }
        return sb.toString();
    }
    private String printArg(final TypeMirror tmfinal boolean varArgboolean fqn) {
        if (varArg) {
            if (tm.getKind() == .) {
                final ArrayType at = (ArrayType)tm;
                final StringBuilder sb = new StringBuilderprint(at.getComponentType(), fqn) );
                sb.append("...");   //NOI18N
                return sb.toString();
            } else {
                assert false : "Expected array: " + tm.toString() + " ( " +tm.getKind() + " )"//NOI18N
            }
        }
        return print(tmfqn);
    }
    private String printTypeMirror tmboolean fqn) {
        StringBuilder sb;
        switch ( tm.getKind() ) {
            case :
                DeclaredType dt = (DeclaredType)tm;
                sb = new StringBuilder(
                    fqn?
                    ((TypeElement)dt.asElement()).getQualifiedName().toString():
                    dt.asElement().getSimpleName().toString());
                List<? extends TypeMirrortypeArgs = dt.getTypeArguments();
                if ( !typeArgs.isEmpty() ) {
                    sb.append("&lt;");
                    for (Iterator<? extends TypeMirrorit = typeArgs.iterator(); it.hasNext();) {
                        TypeMirror ta = it.next();
                        sb.append(print(tafqn));
                        if ( it.hasNext() ) {
                            sb.append(", ");
                        }
                    }
                    sb.append("&gt;");
                }
                return sb.toString(); 
            case :
                TypeVariable tv = (TypeVariable)tm;  
                sb = new StringBuildertv.asElement().getSimpleName().toString() );
                return sb.toString();
            case :
                ArrayType at = (ArrayType)tm;
                sb = new StringBuilderprint(at.getComponentType(), fqn) );
                sb.append("[]");
                return sb.toString();
            case :
                WildcardType wt = (WildcardType)tm;
                sb = new StringBuilder("?");
                if ( wt.getExtendsBound() != null ) {
                    sb.append(" extends "); // NOI18N
                    sb.append(print(wt.getExtendsBound(), fqn));
                }
                if ( wt.getSuperBound() != null ) {
                    sb.append(" super "); // NOI18N
                    sb.append(print(wt.getSuperBound(), fqn));
                }
                return sb.toString();
            default:
                return Utils.escape(tm.toString());
        }
    }
New to GrepCode? Check out our FAQ X