@Override public List<SNode> getVariables() { LinkedList<SNode> nodes = new LinkedList<SNode>(); if (TypesUtil.isVariable(myChild)) { nodes.add(myChild); } if (TypesUtil.isVariable(myParent)) { nodes.add(myParent); } return nodes; }
@Nullable /*package*/ SNode getTypeOf(final SNode node) { ModelAccess.assertLegalRead(); if (node == null) return null; if (myTypeChecker.isGenerationMode()) { TypeCheckingContext context = myTypeChecker.hasPerformanceTracer() ? new TargetTypecheckingContext_Tracer(node, myTypeChecker) : new TargetTypecheckingContext(node, myTypeChecker); try { return context.getTypeOf_generationMode(node); } finally { context.dispose(); } } // now we are not in generation mode final ITypeContextOwner contextOwner = myTypecheckingContextOwner.get(); TypeCheckingContext context = acquireTypecheckingContext(node, contextOwner); if (context == null) { return TypesUtil.createRuntimeErrorType(); } try { return context.getTypeOf(node, myTypeChecker); } finally { releaseTypecheckingContext(node, contextOwner); } }
public static boolean hasVariablesInside(SNode node) { if (isRuntimeTypeVariable(node)) { return true; } for (SNode child : node.getChildren()) { if (hasVariablesInside(child)) { return true; } } for (SNode referent : TypesUtil.getNodeReferents(node)) { if (referent != null && HUtil.isRuntimeTypeVariable(referent)) { return true; } } return false; }