@Check public void checkExplicitOperationCall(XMemberFeatureCall featureCall) { if (featureCall.getFeature() instanceof JvmOperation && !featureCall.isExplicitOperationCallOrBuilderSyntax() && featureCall.getFeature().getSimpleName().equals(featureCall.getConcreteSyntaxFeatureName())) { addIssue("Method call without parentheses", featureCall, XbasePackage.Literals.XABSTRACT_FEATURE_CALL__FEATURE, OPERATION_WITHOUT_PARENTHESES); } }
private static void loopReceiver(LinkedList<String> sourceFeature, Object obj) { if (obj instanceof XMemberFeatureCall) { final XMemberFeatureCall memberFeatureCall = (XMemberFeatureCall) obj; sourceFeature.addFirst(memberFeatureCall.getFeature().getSimpleName()); loopReceiver(sourceFeature, memberFeatureCall.getMemberCallTarget()); } else if (obj instanceof XFeatureCall) { final XFeatureCall featureCall = (XFeatureCall) obj; sourceFeature.addFirst(featureCall.getFeature().getIdentifier()); } }
protected void _visit(final XMemberFeatureCall semanticObj, final INode originNode, final ImportsAcceptor acceptor) { if (((semanticObj.getFeature() instanceof JvmType) && semanticObj.isTypeLiteral())) { JvmIdentifiableElement _feature = semanticObj.getFeature(); this.visit(((JvmType) _feature), originNode, acceptor); } boolean _isExplicitStatic = semanticObj.isExplicitStatic(); boolean _not = (!_isExplicitStatic); if (_not) { final XExpression target = semanticObj.getMemberCallTarget(); if ((target instanceof XAbstractFeatureCall)) { boolean _isTypeLiteral = ((XAbstractFeatureCall)target).isTypeLiteral(); if (_isTypeLiteral) { return; } } this.collectStaticImportsFrom(semanticObj, acceptor); } }
private void checkForImpureJavaCallsInternal(XExpression xExpression) { Iterator<EObject> eAllContents = Iterators.concat(Iterators.singletonIterator(xExpression), xExpression.eAllContents()); while (eAllContents.hasNext()) { EObject nextEObject = eAllContents.next(); if (nextEObject instanceof XMemberFeatureCall) { XMemberFeatureCall xFeatureCall = (XMemberFeatureCall) nextEObject; JvmIdentifiableElement jvmIdentifiableElement = xFeatureCall.getFeature(); if (jvmIdentifiableElement instanceof JvmOperation) { JvmOperation jvmOperation = (JvmOperation) jvmIdentifiableElement; if (!jvmOperation.eIsProxy() && !isPure(jvmOperation)) { warning("Impure method call " + jvmOperation.getQualifiedName(), xFeatureCall, XbasePackage.Literals.XABSTRACT_FEATURE_CALL__FEATURE, IssueCodes.CHECK_WITH_IMPURE_JAVA_CALLS); } } } } }
private void checkForImpureJavaCallsInternal(XExpression xExpression, EStructuralFeature feature) { Set<String> elementsWithWarnings = new HashSet<String>(); if (xExpression != null) { TreeIterator<EObject> eAllContents = xExpression.eAllContents(); while (eAllContents.hasNext()) { EObject nextEObject = eAllContents.next(); if (nextEObject instanceof XMemberFeatureCall) { XMemberFeatureCall xFeatureCall = (XMemberFeatureCall) nextEObject; JvmIdentifiableElement jvmIdentifiableElement = xFeatureCall.getFeature(); if (jvmIdentifiableElement instanceof JvmOperation) { JvmOperation jvmOperation = (JvmOperation) jvmIdentifiableElement; if (!PurityChecker.isPure(jvmOperation) && !jvmOperation.eIsProxy()) { elementsWithWarnings.add(jvmOperation.getQualifiedName()); } } } } } if (!elementsWithWarnings.isEmpty()) { warning("There is at least one potentially problematic java call in the check()/eval() expression. Custom java calls " + "are considered unsafe in IncQuery unless they are annotated with @" + Pure.class.getSimpleName() + " or registered with the " + PureWhitelistExtensionLoader.EXTENSION_ID + " extension point. The possible erroneous calls are the following: " + elementsWithWarnings + ".", xExpression.eContainer(), feature, IssueCodes.CHECK_WITH_IMPURE_JAVA_CALLS); } }
protected Object _doEvaluate(final XMemberFeatureCall featureCall, final IEvaluationContext context, final CancelIndicator indicator) { if (featureCall.isTypeLiteral()) { JvmType type = (JvmType) featureCall.getFeature(); Object result = translateJvmTypeToResult(type, 0); return result; } else { XExpression receiver = getActualReceiver(featureCall); //, featureCall.getFeature(), featureCall.getImplicitReceiver()); Object receiverObj = receiver==null?null:internalEvaluate(receiver, context, indicator); if (featureCall.isNullSafe() && receiverObj==null) { return getDefaultObjectValue(typeResolver.resolveTypes(featureCall).getActualType(featureCall)); } return invokeFeature(featureCall.getFeature(), featureCall, receiverObj, context, indicator); } }
if ((((((XMemberFeatureCall)expression).getFeature() != null) && ((XMemberFeatureCall)expression).getFeature().eIsProxy()) && (!((XMemberFeatureCall)expression).isExplicitOperationCallOrBuilderSyntax()))) { _matched=true; final XExpression receiver = ((XMemberFeatureCall)expression).getActualReceiver();
acceptor.accept(memberFeatureCallElements.getFeatureJvmIdentifiableElementIdOrSuperParserRuleCall_1_1_2_0_1(), featureCall.getFeature());
if (featureCall.getFeature() instanceof JvmType && featureCall.isTypeLiteral()) { if (isOuterTypeLiteral(featureCall)) { contents.prune();