|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.javacore.jmiimpl.javamodel; import org.netbeans.jmi.javamodel.*; import org.netbeans.lib.java.parser.ASTree; import org.netbeans.lib.java.parser.ParserTokens; import org.netbeans.lib.java.parser.Token; import org.netbeans.modules.javacore.parser.ASTProvider; import java.util.Arrays; /** * * @author Tomas Hurka */ class ElementNavigator { private int idIndexes[]; ElementNavigator(Resource r,NamedElement element) { ResourceImpl impl=(ResourceImpl)r; ASTProvider parser=impl.getParser(); ASTree tree; if (element instanceof Parameter) tree = ((SemiPersistentElement)element.refImmediateComposite()).getASTree(); else tree = impl.getASTree(); if (parser!=null) { int lastToken=tree.getLastToken(); int ids[]=new int[lastToken]; int i,idIndex=0; String id; String fullPackageName=null; if (element instanceof JavaClass) { id=((JavaClass)element).getSimpleName(); } else if (element instanceof JavaPackage) { fullPackageName=id=element.getName(); int lastDot=id.lastIndexOf('.'); if (lastDot!=-1) id=id.substring(lastDot+1); } else if (element instanceof Constructor) { id=((JavaClass)((Constructor)element).getDeclaringClass()).getSimpleName(); } else id=element.getName(); for (i=tree.getFirstToken();i<=lastToken;i++) { Token token=parser.getToken(i); if (token.getType()==ParserTokens.IDENTIFIER && id.equals(token.getValue())) { try { if (element instanceof Field || element instanceof CallableFeature) { Token nextToken=parser.getToken(i+1); if (nextToken.getType()==ParserTokens.L_PAR) { if (element instanceof Field) continue; if (element instanceof Constructor) { int offset=1; Token prevToken; while(true) { prevToken=parser.getToken(i-offset); if (prevToken.getType()!=ParserTokens.DOT) break; offset++; prevToken=parser.getToken(i-offset); if (prevToken.getType()!=ParserTokens.IDENTIFIER) break; offset++; } if (prevToken.getType()!=ParserTokens.NEW) continue; } } else { if (element instanceof CallableFeature) continue; } } else if (element instanceof JavaPackage) { int offset=1; StringBuffer packageName=new StringBuffer(id); while(true) { Token prevToken=parser.getToken(i-offset); if (prevToken.getType()!=ParserTokens.DOT) break; offset++; packageName.insert(0,'.'); prevToken=parser.getToken(i-offset); if (prevToken.getType()!=ParserTokens.IDENTIFIER) break; offset++; packageName.insert(0,prevToken.getValue()); } if (!packageName.toString().equals(fullPackageName)) continue; } } catch (IndexOutOfBoundsException ex) { // we are out of token bounds continue; } ids[idIndex++]=i; } } idIndexes=new int[idIndex]; System.arraycopy(ids, 0, idIndexes, 0, idIndex); } else { throw new IllegalArgumentException("ASTProvider is null"); // NOI18N } } boolean containsIdentifierIn(MetadataElement element) { int first,last,index; ASTree tree=element.getASTree(); if (tree==null) throw new IllegalArgumentException("Illegal element "+element); // NOI18N first=tree.getFirstToken(); last=tree.getLastToken(); index=Arrays.binarySearch(idIndexes,first); if (index>=0) return true; index=-index-1; if (index==idIndexes.length) return false; return idIndexes[index]<=last; } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.