当前位置: 首页>>代码示例>>Java>>正文


Java XClosure.getFormalParameters方法代码示例

本文整理汇总了Java中org.eclipse.xtext.xbase.XClosure.getFormalParameters方法的典型用法代码示例。如果您正苦于以下问题:Java XClosure.getFormalParameters方法的具体用法?Java XClosure.getFormalParameters怎么用?Java XClosure.getFormalParameters使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在org.eclipse.xtext.xbase.XClosure的用法示例。


在下文中一共展示了XClosure.getFormalParameters方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: checkClosureParameterTypes

import org.eclipse.xtext.xbase.XClosure; //导入方法依赖的package包/类
@Check
public void checkClosureParameterTypes(XClosure closure) {
	if (closure.getFormalParameters().isEmpty())
		return;
	LightweightTypeReference closureType = getActualType(closure);
	if (closureType != null && closureType.isUnknown())
		return;
	boolean checkedClosure = false;
	for (JvmFormalParameter p : closure.getFormalParameters()) {
		if (p.getParameterType() == null) {
			if (!checkedClosure) {
				LightweightTypeReference type = getExpectedType(closure);
				if (type == null) {
					error("There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.",
							closure, null, INSIGNIFICANT_INDEX, TOO_LITTLE_TYPE_INFORMATION);
					return;
				} else {
					JvmOperation operation = getServices().getFunctionTypes().findImplementingOperation(type);
					if (operation == null) {
						error("There is no context to infer the closure's argument types from. Consider typing the arguments or use the closures in a more specific context.",
								closure, null, INSIGNIFICANT_INDEX, TOO_LITTLE_TYPE_INFORMATION);
						return;
					}
				}
				checkedClosure = true;
			}
			LightweightTypeReference parameterType = getActualType(closure, p);
			if (parameterType == null) {
				error("There is no context to infer the closure's argument types from. Consider typing the arguments or use the closures in a more specific context.",
						closure, null, INSIGNIFICANT_INDEX, TOO_LITTLE_TYPE_INFORMATION);
				return;
			}
		}
	}
}
 
开发者ID:eclipse,项目名称:xtext-extras,代码行数:36,代码来源:XbaseValidator.java

示例2: toAnonymousClass

import org.eclipse.xtext.xbase.XClosure; //导入方法依赖的package包/类
protected ITreeAppendable toAnonymousClass(final XClosure closure, final ITreeAppendable b, LightweightTypeReference type,
		JvmOperation operation) {
	b.append("new ");
	b.append(type);
	b.append("() {");
	b.increaseIndentation();
	try {
		b.openScope();
		String selfVariable = null;
		if (needSyntheticSelfVariable(closure, type)) {
			b.newLine().append("final ");
			b.append(type).append(" ");
			selfVariable = b.declareVariable(type.getType(), "_self");
			b.append(selfVariable);
			b.append(" = this;");
		}
		final LightweightTypeReference returnType = getClosureOperationReturnType(type, operation);
		appendOperationVisibility(b, operation);
		if (!operation.getTypeParameters().isEmpty()) {
			appendTypeParameters(b, operation, type);
		}
		b.append(returnType);
		b.append(" ").append(operation.getSimpleName());
		b.append("(");
		List<JvmFormalParameter> closureParams = closure.getFormalParameters();
		boolean isVarArgs = operation.isVarArgs();
		for (int i = 0; i < closureParams.size(); i++) {
			JvmFormalParameter closureParam = closureParams.get(i);
			LightweightTypeReference parameterType = getClosureOperationParameterType(type, operation, i);
			if (isVarArgs && i == closureParams.size()-1 && parameterType.isArray()) {
				appendClosureParameterVarArgs(closureParam, parameterType.getComponentType(), b);
			} else {					
				appendClosureParameter(closureParam, parameterType, b);
			}
			if (i != closureParams.size() - 1)
				b.append(", ");
		}
		b.append(")");
		if(!operation.getExceptions().isEmpty()) {
			b.append(" throws ");
			for (int i = 0; i < operation.getExceptions().size(); ++i) {
				serialize(operation.getExceptions().get(i), closure, b, false, false, false, false);
				if(i != operation.getExceptions().size() -1)
					b.append(", ");
			}
		}
		b.append(" {");
		b.increaseIndentation();
		if (selfVariable == null) {
			reassignThisInClosure(b, type.getType());
		} else {
			// We have already assigned the closure type to _self, so don't assign it again
			reassignThisInClosure(b, null);
		}
		compile(closure.getExpression(), b, returnType, newHashSet(operation.getExceptions()));
		closeBlock(b);
	} finally {
		b.closeScope();
	}
	return b.decreaseIndentation().newLine().append("}");
}
 
开发者ID:eclipse,项目名称:xtext-extras,代码行数:62,代码来源:XbaseCompiler.java

示例3: toLambda

import org.eclipse.xtext.xbase.XClosure; //导入方法依赖的package包/类
protected ITreeAppendable toLambda(XClosure closure, ITreeAppendable b, LightweightTypeReference type,
		JvmOperation operation, boolean writeExplicitTargetType) {
	if (writeExplicitTargetType) {
		b.append("((");
		b.append(type);
		b.append(") ");
	}
	try {
		b.openPseudoScope();
		b.append("(");
		List<JvmFormalParameter> closureParams = closure.getFormalParameters();
		boolean isVarArgs = operation.isVarArgs();
		for (int i = 0; i < closureParams.size(); i++) {
			JvmFormalParameter closureParam = closureParams.get(i);
			LightweightTypeReference parameterType = getClosureOperationParameterType(type, operation, i);
			if (isVarArgs && i == closureParams.size()-1 && parameterType.isArray()) {
				b.append(parameterType.getComponentType());
				b.append("...");
			} else {
				b.append(parameterType);
			}
			b.append(" ");
			String proposedParamName = makeJavaIdentifier(closureParam.getName());	
			// Usually a normal variable would suffice here. The 'unique name' variable is a workaround for
			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=445949
			String name = b.declareUniqueNameVariable(closureParam, proposedParamName);
			b.append(name);
			if (i != closureParams.size() - 1)
				b.append(", ");
		}
		b.append(") -> {");
		b.increaseIndentation();
		LightweightTypeReference returnType = getClosureOperationReturnType(type, operation);
		compile(closure.getExpression(), b, returnType, newHashSet(operation.getExceptions()));
		closeBlock(b);
	} finally {
		b.closeScope();
	}
	if (writeExplicitTargetType) {
		b.append(")");
	}
	return b;
}
 
开发者ID:eclipse,项目名称:xtext-extras,代码行数:44,代码来源:XbaseCompiler.java


注:本文中的org.eclipse.xtext.xbase.XClosure.getFormalParameters方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。