| 1115 | } |
| 1116 | |
| 1117 | function findRefsToProperty(srv, query, sourceFile, expr, prop) { |
| 1118 | var exprType = infer.expressionType(expr); |
| 1119 | if (expr.node.type == "MethodDefinition") { |
| 1120 | exprType = exprType.propertyOf; |
| 1121 | } |
| 1122 | var objType = exprType.getObjType(); |
| 1123 | if (!objType) throw ternError("Couldn't determine type of base object."); |
| 1124 | |
| 1125 | var refs = []; |
| 1126 | function storeRef(file) { |
| 1127 | return function(node) { |
| 1128 | refs.push({file: file.name, |
| 1129 | start: outputPos(query, file, node.start), |
| 1130 | end: outputPos(query, file, node.end)}); |
| 1131 | }; |
| 1132 | } |
| 1133 | |
| 1134 | if (query.onlySourceFile) { |
| 1135 | infer.findPropRefs(sourceFile.ast, sourceFile.scope, objType, prop.name, storeRef(sourceFile)); |
| 1136 | } else { |
| 1137 | for (var i = 0; i < srv.files.length; ++i) { |
| 1138 | var cur = srv.files[i]; |
| 1139 | infer.findPropRefs(cur.ast, cur.scope, objType, prop.name, storeRef(cur)); |
| 1140 | } |
| 1141 | } |
| 1142 | |
| 1143 | return {refs: refs, name: prop.name}; |
| 1144 | } |
| 1145 | |
| 1146 | function findRefs(srv, query, file) { |
| 1147 | var expr = findExprOrThrow(file, query, true); |