protected void recordExpressions(JvmIdentifiableElement element) { XExpression expression = getLogicalContainerProvider().getAssociatedExpression(element); if (expression != null) { rootedInstances.add(expression); } if (element instanceof JvmDeclaredType) { _recordExpressions((JvmDeclaredType) element); } else if (element instanceof JvmExecutable) { _recordExpressions((JvmExecutable) element); } else if (element instanceof JvmFeature) { _recordExpressions((JvmFeature) element); } }
protected void doPrepare(ResolvedTypes resolvedTypes, IFeatureScopeSession featureScopeSession, JvmIdentifiableElement element, Map<JvmIdentifiableElement, ResolvedTypes> resolvedTypesByContext) { XExpression expression = getLogicalContainerProvider().getAssociatedExpression(element); if (expression != null) { if (!rootedInstances.contains(expression)) { throw new IllegalStateException("Expression not yet recorded: " + expression); } } if (element instanceof JvmDeclaredType) { _doPrepare(resolvedTypes, featureScopeSession, (JvmDeclaredType) element, resolvedTypesByContext); } else if (element instanceof JvmConstructor) { _doPrepare(resolvedTypes, featureScopeSession, (JvmConstructor) element, resolvedTypesByContext); } else if (element instanceof JvmField) { _doPrepare(resolvedTypes, featureScopeSession, (JvmField) element, resolvedTypesByContext); } else if (element instanceof JvmOperation) { _doPrepare(resolvedTypes, featureScopeSession, (JvmOperation) element, resolvedTypesByContext); } }
@Override protected XExpression getRootExpression() { XExpression result = ((LogicalContainerAwareReentrantTypeResolver) getResolver()).getLogicalContainerProvider().getAssociatedExpression(getMember()); if (result == null && member instanceof JvmFeature) { // make sure we process dangling local classes if the expression has been removed by an // active annotation // // To some extend this is a workaround for a bug with #setBody which should // take care of local classes, too List<JvmGenericType> localClasses = ((JvmFeature) member).getLocalClasses(); for(JvmGenericType localClass: localClasses) { LocalVariableCapturer.captureLocalVariables(localClass, this); } } return result; }