List of usage examples for org.eclipse.jdt.core.dom AST resolveWellKnownType
public ITypeBinding resolveWellKnownType(String name)
From source file:astview.WellKnownTypesProperty.java
License:Open Source License
@Override public Object[] getChildren() { AST ast = fRoot.getAST(); Binding[] res = new Binding[WELL_KNOWN_TYPES.length]; for (int i = 0; i < WELL_KNOWN_TYPES.length; i++) { String type = WELL_KNOWN_TYPES[i]; res[i] = new Binding(this, type, ast.resolveWellKnownType(type), true); }/*from w ww .j ava 2s . c o m*/ return res; }
From source file:ca.ecliptical.pde.internal.ds.AnnotationProcessor.java
License:Open Source License
private ITypeBinding getObjectType(AST ast, ITypeBinding primitive) { if (Boolean.TYPE.getName().equals(primitive.getName())) return ast.resolveWellKnownType(Boolean.class.getName()); if (Byte.TYPE.getName().equals(primitive.getName())) return ast.resolveWellKnownType(Byte.class.getName()); if (Character.TYPE.getName().equals(primitive.getName())) return ast.resolveWellKnownType(Character.class.getName()); if (Double.TYPE.getName().equals(primitive.getName())) return ast.resolveWellKnownType(Double.class.getName()); if (Float.TYPE.getName().equals(primitive.getName())) return ast.resolveWellKnownType(Float.class.getName()); if (Integer.TYPE.getName().equals(primitive.getName())) return ast.resolveWellKnownType(Integer.class.getName()); if (Long.TYPE.getName().equals(primitive.getName())) return ast.resolveWellKnownType(Long.class.getName()); if (Short.TYPE.getName().equals(primitive.getName())) return ast.resolveWellKnownType(Short.class.getName()); return null;//from w w w .j a v a2 s . c o m }
From source file:cideplus.ui.astview.WellKnownTypesProperty.java
License:Open Source License
public Object[] getChildren() { AST ast = fRoot.getAST(); Binding[] res = new Binding[WELL_KNOWN_TYPES.length]; for (int i = 0; i < WELL_KNOWN_TYPES.length; i++) { String type = WELL_KNOWN_TYPES[i]; res[i] = new Binding(this, type, ast.resolveWellKnownType(type), true); }//from ww w. j a va 2s . co m return res; }
From source file:com.google.devtools.j2cpp.gen.CppStatementGenerator.java
License:Open Source License
private String getRightShiftType(Expression node) { ITypeBinding binding = node.resolveTypeBinding(); AST ast = node.getAST(); if (binding == null || ast.resolveWellKnownType("int").equals(binding)) { return "int"; } else if (ast.resolveWellKnownType("long").equals(binding)) { return "long long"; } else if (ast.resolveWellKnownType("byte").equals(binding)) { return "char"; } else if (ast.resolveWellKnownType("short").equals(binding)) { return "short"; } else if (ast.resolveWellKnownType("char").equals(binding)) { return "unichar"; } else {/*w w w .j a v a 2s . c o m*/ throw new AssertionError("invalid right shift expression type: " + binding.getName()); } }
From source file:com.google.devtools.j2cpp.translate.AnonymousClassConverter.java
License:Open Source License
/** * Adds val$N instance fields to type so references to external * variables can be resolved. Existing constructors are updated to * initialize these fields; if no constructor exists, one is added. *///from w w w. j ava2 s.co m private GeneratedMethodBinding addInnerVars(TypeDeclaration node, List<IVariableBinding> innerVars, List<ReferenceDescription> references, List<Expression> invocationArguments) { @SuppressWarnings("unchecked") List<BodyDeclaration> members = node.bodyDeclarations(); // safe by definition List<IVariableBinding> innerFields = Lists.newArrayList(); AST ast = node.getAST(); ITypeBinding clazz = Types.getTypeBinding(node); for (IVariableBinding var : innerVars) { if (!isConstant(var)) { // Constants are in-lined instead. ITypeBinding varType = var.getDeclaringClass(); if (varType == null) { varType = var.getType(); } if (Types.hasIOSEquivalent(varType)) { varType = Types.mapType(varType); } String fieldName = "val$" + var.getName(); FieldDeclaration field = createField(fieldName, varType, clazz, ast); members.add(field); IVariableBinding fieldVar = Types.getVariableBinding(field.fragments().get(0)); innerFields.add(fieldVar); for (ReferenceDescription ref : references) { if (ref.binding == var && ref.innerField == null) { ref.innerField = fieldVar; } } } } // Insert new parameters into constructor, if one was added by the // InitializationNormalizer from initializer blocks. boolean needsConstructor = true; GeneratedMethodBinding defaultConstructor = null; List<MethodDeclaration> enumConstructors = Lists.newArrayList(); ITypeBinding enclosingClass = clazz.getDeclaringClass(); for (BodyDeclaration member : members) { if (member instanceof MethodDeclaration && ((MethodDeclaration) member).isConstructor()) { if (argsMatch(invocationArguments, Types.getMethodBinding(member).getParameterTypes())) { MethodDeclaration constructor = (MethodDeclaration) member; needsConstructor = false; IMethodBinding oldBinding = Types.getMethodBinding(constructor); GeneratedMethodBinding newBinding = new GeneratedMethodBinding(oldBinding); Types.addBinding(constructor, newBinding); addInnerParameters(constructor, newBinding, innerFields, ast, true); defaultConstructor = newBinding; Symbols.scanAST(constructor); assert constructor.parameters().size() == defaultConstructor.getParameterTypes().length; } if (enclosingClass.isEnum()) { enumConstructors.add((MethodDeclaration) member); } } } if (!enumConstructors.isEmpty()) { for (MethodDeclaration constructor : enumConstructors) { GeneratedMethodBinding binding = new GeneratedMethodBinding(Types.getMethodBinding(constructor)); if (!invocationArguments.isEmpty()) { // Remove super invocation added by InitializationNormalizer. @SuppressWarnings("unchecked") List<Statement> stmts = constructor.getBody().statements(); // safe by definition for (int i = 0; i < stmts.size(); i++) { if (stmts.get(i) instanceof SuperConstructorInvocation) { stmts.remove(i); break; } } // Update the binding to include the arguments, addArguments(invocationArguments, ast, clazz, constructor, binding); addInnerParameters(constructor, binding, innerFields, ast, true); Symbols.scanAST(constructor); Types.addBinding(constructor, binding); } else { defaultConstructor = binding; } } if (defaultConstructor == null) { defaultConstructor = new GeneratedMethodBinding(Types.getMethodBinding(enumConstructors.get(0))); } } else if (needsConstructor) { MethodDeclaration constructor = ast.newMethodDeclaration(); constructor.setConstructor(true); ITypeBinding voidType = ast.resolveWellKnownType("void"); GeneratedMethodBinding binding = new GeneratedMethodBinding("init", 0, voidType, clazz, true, false, true); Types.addBinding(constructor, binding); Types.addBinding(constructor.getReturnType2(), voidType); SimpleName name = ast.newSimpleName("init"); Types.addBinding(name, binding); constructor.setName(name); constructor.setBody(ast.newBlock()); if (!invocationArguments.isEmpty()) { addArguments(invocationArguments, ast, clazz, constructor, binding); } addInnerParameters(constructor, binding, innerFields, ast, true); members.add(constructor); Symbols.scanAST(constructor); defaultConstructor = binding; assert constructor.parameters().size() == defaultConstructor.getParameterTypes().length; } assert defaultConstructor != null; return defaultConstructor; }
From source file:com.google.devtools.j2cpp.translate.AnonymousClassConverter.java
License:Open Source License
/** * Returns a literal node for a specified constant value. *//*from w w w . ja v a 2 s .co m*/ private Expression makeLiteral(Object value, String typeName, AST ast) { Expression literal; if (value instanceof Boolean) { literal = ast.newBooleanLiteral((Boolean) value); } else if (value instanceof Character) { CharacterLiteral c = ast.newCharacterLiteral(); c.setCharValue((Character) value); literal = c; } else if (value instanceof Number) { literal = ast.newNumberLiteral(value.toString()); } else if (value instanceof String) { StringLiteral s = ast.newStringLiteral(); s.setLiteralValue((String) value); literal = s; } else { throw new AssertionError("unknown constant type"); } ITypeBinding type = ast.resolveWellKnownType(typeName); assert type != null : "unknown constant type"; Types.addBinding(literal, type); return literal; }
From source file:com.google.devtools.j2cpp.translate.DestructorGenerator.java
License:Open Source License
private MethodDeclaration buildFinalizeMethod(AST ast, ITypeBinding declaringClass, List<IVariableBinding> fields) { ITypeBinding voidType = Types.mapTypeName("void"); GeneratedMethodBinding binding = new GeneratedMethodBinding(destructorName, Modifier.PUBLIC, voidType, declaringClass, false, false, true); MethodDeclaration method = ast.newMethodDeclaration(); Types.addBinding(method, binding); method.setName(ast.newSimpleName(destructorName)); Types.addBinding(method.getName(), binding); @SuppressWarnings("unchecked") List<Modifier> modifiers = method.modifiers(); modifiers.add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)); method.setBody(ast.newBlock());// w ww .ja va2s.c o m addReleaseStatements(method, fields); Type returnType = ast.newPrimitiveType(PrimitiveType.VOID); Types.addBinding(returnType, ast.resolveWellKnownType("void")); method.setReturnType2(returnType); return method; }
From source file:com.google.devtools.j2cpp.translate.GwtConverter.java
License:Open Source License
@Override public boolean visit(MethodInvocation node) { IMethodBinding method = Types.getMethodBinding(node); @SuppressWarnings("unchecked") List<Expression> args = node.arguments(); if (method.getName().equals("create") && method.getDeclaringClass().getQualifiedName().equals(GWT_CLASS) && args.size() == 1) { // Convert GWT.create(Foo.class) to Foo.class.newInstance(). AST ast = node.getAST(); SimpleName name = ast.newSimpleName("newInstance"); node.setName(name);/* www . j ava 2 s.c om*/ Expression clazz = NodeCopier.copySubtree(ast, args.get(0)); args.remove(0); node.setExpression(clazz); GeneratedMethodBinding newBinding = new GeneratedMethodBinding("newInstance", 0, ast.resolveWellKnownType("java.lang.Object"), ast.resolveWellKnownType("java.lang.Class"), false, false, false); Types.addBinding(name, newBinding); Types.addBinding(node, newBinding); } else if (isGwtTest(node)) { J2ObjC.error(node, "GWT.isScript() detected in boolean expression, which is not supported"); } return true; }
From source file:com.google.devtools.j2cpp.translate.InitializationNormalizer.java
License:Open Source License
@SuppressWarnings("unchecked") private void addMethod(String name, int modifiers, ITypeBinding type, List<Statement> initStatements, List<BodyDeclaration> members, AST ast, boolean isConstructor) { Block body = ast.newBlock();/* www. j a va2 s . co m*/ List<Statement> stmts = body.statements(); // safe by definition for (Statement stmt : initStatements) { Statement newStmt = NodeCopier.copySubtree(ast, stmt); stmts.add(newStmt); } MethodDeclaration method = ast.newMethodDeclaration(); GeneratedMethodBinding binding = new GeneratedMethodBinding(name, modifiers, null, type, isConstructor, false, true); Types.addBinding(method, binding); Type returnType = ast.newPrimitiveType(PrimitiveType.VOID); Types.addBinding(returnType, ast.resolveWellKnownType("void")); method.setReturnType2(returnType); method.setBody(body); method.setConstructor(isConstructor); method.modifiers().addAll(ast.newModifiers(modifiers)); SimpleName nameNode = NameTable.unsafeSimpleName(name, ast); Types.addBinding(nameNode, binding); method.setName(nameNode); members.add(method); Symbols.resolve(method, binding); }
From source file:com.google.devtools.j2cpp.translate.InnerClassExtractor.java
License:Open Source License
private void addOuterFields(AbstractTypeDeclaration node) { @SuppressWarnings("unchecked") List<BodyDeclaration> members = node.bodyDeclarations(); // safe by definition AST ast = node.getAST(); ITypeBinding clazz = Types.getTypeBinding(node); ITypeBinding outerClazz = clazz.getDeclaringClass(); assert outerClazz != null; List<IVariableBinding> innerFields = Lists.newArrayList(); // Ensure that the new outer field does not conflict with a field in a superclass. ITypeBinding superClazz = clazz.getSuperclass(); ITypeBinding superDeclaringClazz = superClazz.getDeclaringClass(); int suffix = 0; while (superClazz.getDeclaringClass() != null) { if (!Modifier.isStatic(superClazz.getModifiers())) { suffix++;//from w ww . j ava 2 s . com } superClazz = superClazz.getSuperclass(); } String outerFieldName = "this$" + suffix; FieldDeclaration outerField = createField(outerFieldName, outerClazz, clazz, ast); members.add(0, outerField); IVariableBinding outerVar = Types.getVariableBinding(outerField.fragments().get(0)); innerFields.add(outerVar); if (superDeclaringClazz != null && !Modifier.isStatic(clazz.getSuperclass().getModifiers()) && !outerClazz.isAssignmentCompatible(superDeclaringClazz.getTypeDeclaration())) { // The super class is an inner class, and it's declaring class and the // current node's declaring class don't match, so we need another outer // var. This var is only a parameter, not a field, an it's name doesn't // matter because addInnerParameters will assign a different name to it // anyway. IVariableBinding secondOuterVar = new GeneratedVariableBinding("", Modifier.FINAL, superDeclaringClazz, false, true, superClazz, null); innerFields.add(secondOuterVar); } // Insert new parameters for each constructor in class. boolean needsConstructor = true; for (BodyDeclaration member : members) { if (member instanceof MethodDeclaration && ((MethodDeclaration) member).isConstructor()) { needsConstructor = false; MethodDeclaration constructor = (MethodDeclaration) member; IMethodBinding oldBinding = Types.getMethodBinding(constructor); GeneratedMethodBinding newBinding = new GeneratedMethodBinding(oldBinding); Types.addBinding(constructor, newBinding); addInnerParameters(constructor, newBinding, innerFields, ast, false); assert constructor.parameters().size() == newBinding.getParameterTypes().length; } } if (needsConstructor) { MethodDeclaration constructor = ast.newMethodDeclaration(); constructor.setConstructor(true); ITypeBinding voidType = ast.resolveWellKnownType("void"); GeneratedMethodBinding binding = new GeneratedMethodBinding("init", 0, voidType, clazz, true, false, true); Types.addBinding(constructor, binding); Types.addBinding(constructor.getReturnType2(), voidType); SimpleName name = ast.newSimpleName("init"); Types.addBinding(name, binding); constructor.setName(name); constructor.setBody(ast.newBlock()); addInnerParameters(constructor, binding, innerFields, ast, false); members.add(constructor); assert constructor.parameters().size() == binding.getParameterTypes().length; } }