com.sun.tools.javac.tree.JCTree.JCFunctionalExpression Java Examples
The following examples show how to use
com.sun.tools.javac.tree.JCTree.JCFunctionalExpression.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: TreeConverter.java From j2objc with Apache License 2.0 | 6 votes |
private TreeNode convertFunctionalExpression( JCFunctionalExpression node, TreePath parent, FunctionalExpression newNode) { List<? extends TypeMirror> targets = getTargets(node, parent); for (TypeMirror type : targets) { newNode.addTargetType(type); } Types types = Types.instance(((com.sun.tools.javac.api.BasicJavacTask) env.task()).getContext()); return newNode .setTypeMirror(targets.iterator().next()) .setDescriptor( new ExecutablePair( (ExecutableElement) types .findDescriptorSymbol(((com.sun.tools.javac.code.Type) targets.get(0)).tsym), (ExecutableType) node.getDescriptorType(types))); }
Example #2
Source File: TreeConverter.java From j2objc with Apache License 2.0 | 5 votes |
private List<? extends TypeMirror> getTargets(JCFunctionalExpression node, TreePath parent) { try { @SuppressWarnings("unchecked") com.sun.tools.javac.util.List<com.sun.tools.javac.code.Type> result = (com.sun.tools.javac.util.List<com.sun.tools.javac.code.Type>) JCFunctionalExpression.class.getField("targets").get(node); return result; } catch (ReflectiveOperationException e) { // continue below } // In earlier versions, the TypeMirror just contained the first type of an intersection type. // That's why, the field "targets" is used above. This issue is fixed in JDK 11. TypeMirror t = getTypeMirror(getTreePath(parent, node)); return newUnit.getEnv().typeUtil().getUpperBounds(t); }
Example #3
Source File: TreeConverter.java From j2objc with Apache License 2.0 | 5 votes |
private TreeNode convertLambda(LambdaExpressionTree node, TreePath parent) { TreePath path = getTreePath(parent, node); LambdaExpression newNode = new LambdaExpression(); convertFunctionalExpression((JCFunctionalExpression) node, parent, newNode); for (VariableTree param : node.getParameters()) { newNode.addParameter((VariableDeclaration) convert(param, path)); } return newNode.setBody(convert(node.getBody(), path)); }
Example #4
Source File: LambdaToMethod.java From lua-for-android with BSD 3-Clause "New" or "Revised" License | 4 votes |
/** * Generate an indy method call to the meta factory */ private JCExpression makeMetafactoryIndyCall(TranslationContext<?> context, int refKind, Symbol refSym, List<JCExpression> indy_args) { JCFunctionalExpression tree = context.tree; //determine the static bsm args MethodSymbol samSym = (MethodSymbol) types.findDescriptorSymbol(tree.type.tsym); List<Object> staticArgs = List.of( typeToMethodType(samSym.type), new Pool.MethodHandle(refKind, refSym, types), typeToMethodType(tree.getDescriptorType(types))); //computed indy arg types ListBuffer<Type> indy_args_types = new ListBuffer<>(); for (JCExpression arg : indy_args) { indy_args_types.append(arg.type); } //finally, compute the type of the indy call MethodType indyType = new MethodType(indy_args_types.toList(), tree.type, List.nil(), syms.methodClass); Name metafactoryName = context.needsAltMetafactory() ? names.altMetafactory : names.metafactory; if (context.needsAltMetafactory()) { ListBuffer<Object> markers = new ListBuffer<>(); for (Type t : tree.targets.tail) { if (t.tsym != syms.serializableType.tsym) { markers.append(t.tsym); } } int flags = context.isSerializable() ? FLAG_SERIALIZABLE : 0; boolean hasMarkers = markers.nonEmpty(); boolean hasBridges = context.bridges.nonEmpty(); if (hasMarkers) { flags |= FLAG_MARKERS; } if (hasBridges) { flags |= FLAG_BRIDGES; } staticArgs = staticArgs.append(flags); if (hasMarkers) { staticArgs = staticArgs.append(markers.length()); staticArgs = staticArgs.appendList(markers.toList()); } if (hasBridges) { staticArgs = staticArgs.append(context.bridges.length() - 1); for (Symbol s : context.bridges) { Type s_erasure = s.erasure(types); if (!types.isSameType(s_erasure, samSym.erasure(types))) { staticArgs = staticArgs.append(s.erasure(types)); } } } if (context.isSerializable()) { int prevPos = make.pos; try { make.at(kInfo.clazz); addDeserializationCase(refKind, refSym, tree.type, samSym, tree, staticArgs, indyType); } finally { make.at(prevPos); } } } return makeIndyCall(tree, syms.lambdaMetafactory, metafactoryName, staticArgs, indyType, indy_args, samSym.name); }
Example #5
Source File: CompilationUnitBuilder.java From j2cl with Apache License 2.0 | 4 votes |
private TypeDescriptor getTargetType(JCFunctionalExpression expression) { return environment.createTypeDescriptor(expression.type); }