本文整理汇总了Java中com.google.javascript.jscomp.ReferenceCollectingCallback.Reference类的典型用法代码示例。如果您正苦于以下问题:Java Reference类的具体用法?Java Reference怎么用?Java Reference使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Reference类属于com.google.javascript.jscomp.ReferenceCollectingCallback包,在下文中一共展示了Reference类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: collectAliasCandidates
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* If any of the variables are well-defined and alias other variables,
* mark them as aliasing candidates.
*/
private void collectAliasCandidates(NodeTraversal t,
Map<Var, ReferenceCollection> referenceMap) {
if (mode != Mode.CONSTANTS_ONLY) {
for (Iterator<Var> it = t.getScope().getVars(); it.hasNext();) {
Var v = it.next();
ReferenceCollection referenceInfo = referenceMap.get(v);
// NOTE(nicksantos): Don't handle variables that are never used.
// The tests are much easier to write if you don't, and there's
// another pass that handles unused variables much more elegantly.
if (referenceInfo != null && referenceInfo.references.size() >= 2 &&
referenceInfo.isWellDefined() &&
referenceInfo.isAssignedOnce()) {
Reference init = referenceInfo.getInitializingReference();
Node value = init.getAssignedValue();
if (value != null && value.getType() == Token.NAME) {
aliasCandidates.put(value, new AliasCandidate(v, referenceInfo));
}
}
}
}
}
示例2: inlineDeclaredConstant
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* Inline a declared constant.
*/
private void inlineDeclaredConstant(Var v, Node value,
List<Reference> refSet) {
// Replace the references with the constant value
Reference decl = null;
for (Reference r : refSet) {
if (r.getNameNode() == v.getNameNode()) {
decl = r;
} else {
inlineValue(v, r, value.cloneTree());
}
}
removeDeclaration(decl);
}
示例3: isStringWorthInlining
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* Compute whether the given string is worth inlining.
*/
private boolean isStringWorthInlining(Var var, List<Reference> refs) {
if (!inlineAllStrings && !var.isDefine()) {
int len = var.getInitialValue().getString().length() + "''".length();
// if not inlined: var xx="value"; .. xx .. xx ..
// The 4 bytes per reference is just a heuristic:
// 2 bytes per var name plus maybe 2 bytes if we don't inline, e.g.
// in the case of "foo " + CONST + " bar"
int noInlineBytes = "var xx=;".length() + len +
4 * (refs.size() - 1);
// if inlined:
// I'm going to assume that half of the quotes will be eliminated
// thanks to constant folding, therefore I subtract 1 (2/2=1) from
// the string length.
int inlineBytes = (len - 1) * (refs.size() - 1);
// Not inlining if doing so uses more bytes, or this constant is being
// defined.
return noInlineBytes >= inlineBytes;
}
return true;
}
示例4: collectAliasCandidates
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* If any of the variables are well-defined and alias other variables,
* mark them as aliasing candidates.
*/
private void collectAliasCandidates(NodeTraversal t,
Map<Var, ReferenceCollection> referenceMap) {
if (mode != Mode.CONSTANTS_ONLY) {
for (Iterator<Var> it = t.getScope().getVars(); it.hasNext();) {
Var v = it.next();
ReferenceCollection referenceInfo = referenceMap.get(v);
// NOTE(nicksantos): Don't handle variables that are never used.
// The tests are much easier to write if you don't, and there's
// another pass that handles unused variables much more elegantly.
if (referenceInfo != null && referenceInfo.references.size() >= 2 &&
referenceInfo.isWellDefined() &&
referenceInfo.isAssignedOnceInLifetime()) {
Reference init = referenceInfo.getInitializingReference();
Node value = init.getAssignedValue();
if (value != null && value.getType() == Token.NAME) {
aliasCandidates.put(value, new AliasCandidate(v, referenceInfo));
}
}
}
}
}
示例5: inline
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* Do the actual work of inlining a single declaration into a single
* reference.
*/
private void inline(Var v, Reference declaration,
Reference init, Reference reference) {
Node value = init.getAssignedValue();
Preconditions.checkState(value != null);
// Check for function declarations before the value is moved in the AST.
boolean isFunctionDeclaration = NodeUtil.isFunctionDeclaration(value);
inlineValue(v, reference, value.detachFromParent());
if (declaration != init) {
Node expressRoot = init.getGrandparent();
Preconditions.checkState(expressRoot.getType() == Token.EXPR_RESULT);
NodeUtil.removeChild(expressRoot.getParent(), expressRoot);
}
// Function declarations have already been removed.
if (!isFunctionDeclaration) {
removeDeclaration(declaration);
} else {
compiler.reportCodeChange();
}
}
示例6: isValidInitialization
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* @return Whether there is a initial value.
*/
private boolean isValidInitialization(Reference initialization) {
if (initialization == null) {
return false;
} else if (initialization.isDeclaration()) {
// The reference is a FUNCTION declaration or normal VAR declaration
// with a value.
return NodeUtil.isFunctionDeclaration(initialization.getParent())
|| initialization.getNameNode().getFirstChild() != null;
} else {
Node parent = initialization.getParent();
Preconditions.checkState(
parent.getType() == Token.ASSIGN
&& parent.getFirstChild() == initialization.getNameNode());
return true;
}
}
示例7: mapUses
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* Adds a map from each use NAME in {@code root} to its corresponding
* declaring name, *provided the declaration is also under root*.
*
* If the declaration is not under root, then the reference will
* not be added to the map.
*/
public void mapUses(Node root) {
referencesByNameNode = Maps.newHashMap();
ReferenceCollectingCallback callback =
new ReferenceCollectingCallback(compiler,
ReferenceCollectingCallback.DO_NOTHING_BEHAVIOR);
NodeTraversal.traverse(compiler, root, callback);
for (Var variable : callback.getReferencedVariables()) {
ReferenceCollection referenceCollection =
callback.getReferenceCollection(variable);
for (Reference reference : referenceCollection.references) {
Node referenceNameNode = reference.getNameNode();
// Note that this counts a declaration as a reference to itself
referencesByNameNode.put(referenceNameNode, variable.getNameNode());
}
}
}
示例8: collectAliasCandidates
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* If any of the variables are well-defined and alias other variables,
* mark them as aliasing candidates.
*/
private void collectAliasCandidates(NodeTraversal t,
ReferenceMap referenceMap) {
if (mode != Mode.CONSTANTS_ONLY) {
for (Iterator<Var> it = t.getScope().getVars(); it.hasNext();) {
Var v = it.next();
ReferenceCollection referenceInfo = referenceMap.getReferences(v);
// NOTE(nicksantos): Don't handle variables that are never used.
// The tests are much easier to write if you don't, and there's
// another pass that handles unused variables much more elegantly.
if (referenceInfo != null && referenceInfo.references.size() >= 2 &&
referenceInfo.isWellDefined() &&
referenceInfo.isAssignedOnceInLifetime()) {
Reference init = referenceInfo.getInitializingReference();
Node value = init.getAssignedValue();
if (value != null && value.isName()) {
aliasCandidates.put(value, new AliasCandidate(v, referenceInfo));
}
}
}
}
}
示例9: maybeEscapedOrModifiedArguments
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
private boolean maybeEscapedOrModifiedArguments(
Scope scope, ReferenceMap referenceMap) {
if (scope.isLocal()) {
Var arguments = scope.getArgumentsVar();
ReferenceCollection refs = referenceMap.getReferences(arguments);
if (refs != null && !refs.references.isEmpty()) {
for (Reference ref : refs.references) {
Node refNode = ref.getNode();
Node refParent = ref.getParent();
// Any reference that is not a read of the arguments property
// consider a escape of the arguments object.
if (!(NodeUtil.isGet(refParent)
&& refNode == ref.getParent().getFirstChild()
&& !isLValue(refParent))) {
return true;
}
}
}
}
return false;
}
示例10: inline
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* Do the actual work of inlining a single declaration into a single
* reference.
*/
private void inline(Var v, Reference declaration,
Reference init, Reference reference) {
Node value = init.getAssignedValue();
Preconditions.checkState(value != null);
// Check for function declarations before the value is moved in the AST.
boolean isFunctionDeclaration = NodeUtil.isFunctionDeclaration(value);
inlineValue(v, reference, value.detachFromParent());
if (declaration != init) {
Node expressRoot = init.getGrandparent();
Preconditions.checkState(expressRoot.isExprResult());
NodeUtil.removeChild(expressRoot.getParent(), expressRoot);
}
// Function declarations have already been removed.
if (!isFunctionDeclaration) {
removeDeclaration(declaration);
} else {
compiler.reportCodeChange();
}
}
示例11: inlineDeclaredConstant
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* Inline a declared constant.
*/
private void inlineDeclaredConstant(Var v, Node value,
List<Reference> refSet) {
// Replace the references with the constant value
Reference decl = null;
for (Reference r : refSet) {
if (r.getNode() == v.getNameNode()) {
decl = r;
} else {
inlineValue(v, r, value.cloneTree());
}
}
removeDeclaration(decl);
}
示例12: isValidInitialization
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* @return Whether there is a initial value.
*/
private boolean isValidInitialization(Reference initialization) {
if (initialization == null) {
return false;
} else if (initialization.isDeclaration()) {
// The reference is a FUNCTION declaration or normal VAR declaration
// with a value.
if (!NodeUtil.isFunctionDeclaration(initialization.getParent())
&& initialization.getNode().getFirstChild() == null) {
return false;
}
} else {
Node parent = initialization.getParent();
Preconditions.checkState(
parent.isAssign()
&& parent.getFirstChild() == initialization.getNode());
}
Node n = initialization.getAssignedValue();
if (n.isFunction()) {
return compiler.getCodingConvention().isInlinableFunction(n);
}
return true;
}
示例13: afterExitScope
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
@Override
public void afterExitScope(NodeTraversal t, ReferenceMap referenceMap) {
for (Iterator<Var> it = t.getScope().getVars(); it.hasNext();) {
Var v = it.next();
if (isVarInlineForbidden(v)) {
continue;
}
ReferenceCollection referenceInfo = referenceMap.getReferences(v);
if (isInlinableObject(referenceInfo.references)) {
// Blacklist the object itself, as well as any other values
// that it refers to, since they will have been moved around.
staleVars.add(v);
Reference declaration = referenceInfo.references.get(0);
Reference init = referenceInfo.getInitializingReference();
// Split up the object into individual variables if the object
// is never referenced directly in full.
splitObject(v, declaration, init, referenceInfo);
}
}
}
示例14: mapUses
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
/**
* Adds a map from each use NAME in {@code root} to its corresponding
* declaring name, *provided the declaration is also under root*.
*
* If the declaration is not under root, then the reference will
* not be added to the map.
*/
public void mapUses(Node root) {
referencesByNameNode = Maps.newHashMap();
ReferenceCollectingCallback callback =
new ReferenceCollectingCallback(compiler,
ReferenceCollectingCallback.DO_NOTHING_BEHAVIOR);
NodeTraversal.traverse(compiler, root, callback);
for (Var variable : callback.getAllSymbols()) {
ReferenceCollection referenceCollection =
callback.getReferences(variable);
for (Reference reference : referenceCollection.references) {
Node referenceNameNode = reference.getNode();
// Note that this counts a declaration as a reference to itself
referencesByNameNode.put(referenceNameNode, variable.getNameNode());
}
}
}
示例15: removeScriptReferences
import com.google.javascript.jscomp.ReferenceCollectingCallback.Reference; //导入依赖的package包/类
private void removeScriptReferences(InputId inputId) {
Preconditions.checkNotNull(inputId);
if (!inputOrder.containsKey(inputId)) {
return; // Input did not exist when last computed, so skip
}
// TODO(bashir): If this is too slow it is not too difficult to make it
// faster with keeping an index for variables accessed in sourceName.
for (ReferenceCollection collection : refMap.values()) {
if (collection == null) {
continue;
}
List<Reference> oldRefs = collection.references;
SourceRefRange range = findSourceRefRange(oldRefs, inputId);
List<Reference> newRefs = Lists.newArrayList(range.refsBefore());
newRefs.addAll(range.refsAfter());
collection.references = newRefs;
}
}