private void implementInvoke() { BlockExpression block = getBlock(); IParsedElement body = block.getBody(); DynamicFunctionSymbol value; if (body instanceof Expression) { Expression expression = (Expression) body; ReturnStatement syntheticReturnStatement = new ReturnStatement(); syntheticReturnStatement.setValue(expression); syntheticReturnStatement.initLocation( expression.getLocation().getOffset(), expression.getLocation().getLength(), expression.getLineNum(), expression.getColumn(), expression.getLocation().getScriptPartId()); value = new DynamicFunctionSymbol( null, INVOKE_METHOD_NAME, convertToObjectSignature(block), convertToObjectSymbols(block), syntheticReturnStatement); } else { value = new DynamicFunctionSymbol( null, INVOKE_METHOD_NAME, convertToObjectSignature(block), convertToObjectSymbols(block), (IStatement) body); } value.setClassMember(true); value.setPublic(true); value.setFinal(true); getParseInfo().addMemberFunction(value); }
public IType getReturnType() { ArrayList returnStatements = new ArrayList<ReturnStatement>(); ArrayList<IType> returnTypes = new ArrayList<IType>(); getContainedParsedElementsByTypesWithIgnoreSet( returnStatements, new HashSet(getExcludedReturnTypeElements()), ReturnStatement.class); for (int i = 0; i < returnStatements.size(); i++) { ReturnStatement returnStmt = (ReturnStatement) returnStatements.get(i); returnTypes.add(returnStmt.getValue().getType()); } return TypeLord.findLeastUpperBound(returnTypes); }
private void implementToString() { Identifier thisId = new Identifier(); thisId.setSymbol(new Symbol(Keyword.KW_this.getName(), this, null), new StandardSymbolTable()); thisId.setType(this); BeanMethodCallExpression toStrCall = new BeanMethodCallExpression(); toStrCall.setMethodDescriptor(JavaTypes.IBLOCK().getTypeInfo().getMethod("toString")); toStrCall.setRootExpression(thisId); toStrCall.setType(JavaTypes.STRING()); ReturnStatement returnStmt = new ReturnStatement(); returnStmt.setValue(toStrCall); }