001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.gsfret.source.usages;
043:
044: import java.io.IOException;
045: import java.util.HashMap;
046: import java.util.List;
047: import java.util.Map;
048: import org.netbeans.modules.gsf.api.IndexDocument;
049: import org.netbeans.modules.gsf.api.IndexDocumentFactory;
050: import org.netbeans.modules.gsf.api.Indexer;
051: import org.netbeans.modules.gsf.api.ParserFile;
052: import org.netbeans.modules.gsf.api.ParserResult;
053: import org.netbeans.napi.gsfret.source.ParserTaskImpl;
054: import org.netbeans.modules.gsf.Language;
055: import org.netbeans.modules.gsf.LanguageRegistry;
056:
057: /**
058: * This file is originally from Retouche, the Java Support
059: * infrastructure in NetBeans. I have modified the file as little
060: * as possible to make merging Retouche fixes back as simple as
061: * possible.
062: *
063: *
064: * @author Tomas Zezula
065: */
066: public class SourceAnalyser implements IndexDocumentFactory {
067:
068: private final Index index;
069: private final Map<String, List<String>> references;
070:
071: //private final Set<String> toDelete;
072:
073: /** Creates a new instance of SourceAnalyser */
074: public SourceAnalyser(final Index index) {
075: assert index != null;
076: this .index = index;
077: this .references = new HashMap<String, List<String>>();
078: //this.toDelete = new HashSet<String> ();
079: }
080:
081: public final boolean isUpToDate(String resourceName,
082: long resourceMTime) throws IOException {
083: return this .index.isUpToDate(resourceName, resourceMTime);
084: }
085:
086: public void store() throws IOException {
087: }
088:
089: public boolean isValid() throws IOException {
090: return this .index.isValid(true);
091: }
092:
093: public void analyse(
094: Language language,
095: final Iterable<ParserResult/*? extends CompilationUnitTree*/> data,
096: ParserTaskImpl jt, /*JavaFileManager manager, */
097: ParserFile sibling) throws IOException {
098: // I should stash some shit into this.references here such that I can try storing them later, for example
099: // all the class names I can find. This would be a good place to look for the desired language...
100: // Of course, I can have multiple, so I have to index these by the language type, right? Otherwise
101: // how do I choose which one to ask?
102: // Actually, do it once per filetype - it's cheap compared to all the other crap I do per file anyway
103: Indexer indexer = language.getIndexer();
104: if (indexer != null) {
105: for (ParserResult result : data) {
106: String fileUrl = indexer.getPersistentUrl(result
107: .getFile().getFile());
108: List<IndexDocument> documents = indexer.index(result,
109: this );
110: index.store(fileUrl, documents);
111: }
112: }
113: }
114:
115: void analyseUnitAndStore(Indexer indexer, ParserResult result)
116: throws IOException {
117: String fileUrl = indexer.getPersistentUrl(result.getFile()
118: .getFile());
119: List<IndexDocument> documents = indexer.index(result, this );
120: index.store(fileUrl, documents);
121: }
122:
123: public void delete(final ParserFile parserFile) throws IOException {
124: if (!this .index.isValid(false)) {
125: return;
126: }
127: //this.toDelete.add(className);
128:
129: for (Language language : LanguageRegistry.getInstance()) {
130: Indexer indexer = language.getIndexer();
131: if (indexer != null && indexer.isIndexable(parserFile)) {
132: String fileUrl = indexer.getPersistentUrl(parserFile
133: .getFile());
134: index.store(fileUrl, null);
135: }
136: }
137: }
138:
139: Map<String, String> getTimeStamps() throws IOException {
140: return index.getTimeStamps();
141: }
142:
143: public IndexDocument createDocument(int initialPairs) {
144: return new IndexDocumentImpl(initialPairs);
145: }
146:
147: @Override
148: public String toString() {
149: return "SourceAnalyzer("
150: + this .index.toString().substring(
151: this .index.toString().indexOf("@") + 1) + ")";
152: }
153: }
|