root/trunk/ProjectFortress/src/com/sun/fortress/compiler/index/CompilationUnitIndex.java @ 3876

Revision 3876, 4.9 KB (checked in by EricAllen, 5 months ago)

Added API linker and associated hooks (work in progress).
Added some testing of cache cleaning.

Line 
1/*******************************************************************************
2    Copyright 2009 Sun Microsystems, Inc.,
3    4150 Network Circle, Santa Clara, California 95054, U.S.A.
4    All rights reserved.
5
6    U.S. Government Rights - Commercial software.
7    Government users are subject to the Sun Microsystems, Inc. standard
8    license agreement and applicable provisions of the FAR and its supplements.
9
10    Use is subject to license terms.
11
12    This distribution may include materials developed by third parties.
13
14    Sun, Sun Microsystems, the Sun logo and Java are trademarks or registered
15    trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
16 ******************************************************************************/
17
18package com.sun.fortress.compiler.index;
19
20import java.util.HashSet;
21import java.util.Map;
22import java.util.Set;
23
24import com.sun.fortress.nodes.APIName;
25import com.sun.fortress.nodes.CompilationUnit;
26import com.sun.fortress.nodes.Id;
27import com.sun.fortress.nodes.IdOrOpOrAnonymousName;
28import com.sun.fortress.nodes.Import;
29import com.sun.fortress.nodes.ImportedNames;
30import com.sun.fortress.nodes.NodeAbstractVisitor_void;
31import com.sun.fortress.nodes.Op;
32
33import edu.rice.cs.plt.collect.CollectUtil;
34import edu.rice.cs.plt.collect.Relation;
35
36/** Comprises {@link ApiIndex} and {@link CompilationUnit}. */
37public abstract class CompilationUnitIndex {
38
39    private final CompilationUnit _ast;
40    private final Map<Id, Variable> _variables;
41    private final Relation<IdOrOpOrAnonymousName, Function> _functions;
42    private final Set<ParametricOperator> _parametricOperators;
43    private final Map<Id, TypeConsIndex> _typeConses;
44    private final Map<Id, Dimension> _dimensions;
45    private final Map<Id, Unit> _units;
46    private final long _modifiedDate;
47
48    public CompilationUnitIndex(CompilationUnit ast,
49                                Map<Id, Variable> variables,
50                                Relation<IdOrOpOrAnonymousName, Function> functions,
51                                Set<ParametricOperator> parametricOperators,
52                                Map<Id, TypeConsIndex> typeConses,
53                                Map<Id, Dimension> dimensions,
54                                Map<Id, Unit> units,
55                                long modifiedDate) {
56        _ast = ast;
57        _variables = CollectUtil.immutable(variables);
58        _functions = CollectUtil.immutable(functions);
59        _parametricOperators = CollectUtil.immutable(parametricOperators);
60        _typeConses = CollectUtil.immutable(
61                          CollectUtil.union(typeConses,
62                                  CollectUtil.union(dimensions, units)));
63        _dimensions = CollectUtil.immutable(dimensions);
64        _units = CollectUtil.immutable(units);
65        _modifiedDate = modifiedDate;
66    }
67
68    public CompilationUnit ast() { return _ast; }
69
70    public abstract Set<APIName> exports();
71
72    public Set<APIName> imports() {
73        final Set<APIName> result = new HashSet<APIName>();
74        for (Import _import : ast().getImports()) {
75            _import.accept(new NodeAbstractVisitor_void() {
76                public void forImportedNames(ImportedNames that) {
77                    result.add(that.getApiName());
78                }
79            });
80        }
81        return result;
82    }
83
84    public Set<APIName> comprises() {
85        final Set<APIName> result = new HashSet<APIName>();
86        for (APIName _apiName : ast().getComprises()) {
87            result.add(_apiName);
88        }
89        return result;
90    }
91
92    public Map<Id, Variable> variables() { return _variables; }
93
94    public Relation<IdOrOpOrAnonymousName, Function> functions() { return _functions; }
95
96    public Set<ParametricOperator> parametricOperators() { return _parametricOperators; }
97
98    public Map<Id, TypeConsIndex> typeConses() { return _typeConses; }
99
100    public Map<Id, Dimension> dimensions() { return _dimensions; }
101
102    public Map<Id, Unit> units() { return _units; }
103
104    public long modifiedDate() { return _modifiedDate; }
105
106    public boolean declared(IdOrOpOrAnonymousName name) {
107        if ( name instanceof Id ) {
108            Id id = (Id)name;
109            return ( _variables.keySet().contains(id) ||
110                     _functions.firstSet().contains(id) ||
111                     _typeConses.keySet().contains(id) ||
112                     _dimensions.keySet().contains(id) ||
113                     _units.keySet().contains(id) );
114        } else {
115            if ( _functions.firstSet().contains(name) )
116                return true;
117            else {
118                if ( name instanceof Op ) {
119                    Op op = (Op)name;
120                    for ( ParametricOperator opr : _parametricOperators ) {
121                        if ( opr.name().getText().equals(op.getText()) )
122                            return true;
123                    }
124                    return false;
125                } else return false;
126            }
127        }
128    }
129}
Note: See TracBrowser for help on using the browser.