Skip to content

Commit

Permalink
Make LambdaRewriter transition away from *Binding, add in NativeType …
Browse files Browse the repository at this point in the history
…implementing TypeMirror and GeneratedVariableElement implementing Element.

	Change on 2016/07/20 by nbraswell <nbraswell@google.com>

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127992533
  • Loading branch information
Limvot authored and tomball committed Jul 21, 2016
1 parent edc0426 commit 2d5a689
Show file tree
Hide file tree
Showing 20 changed files with 452 additions and 149 deletions.
2 changes: 2 additions & 0 deletions translator/Makefile
Expand Up @@ -268,12 +268,14 @@ JAVA_SOURCES = \
types/GeneratedPackageBinding.java \
types/GeneratedTypeBinding.java \
types/GeneratedVariableBinding.java \
types/GeneratedVariableElement.java \
types/HeaderImportCollector.java \
types/IOSMethodBinding.java \
types/IOSTypeBinding.java \
types/ImplementationImportCollector.java \
types/Import.java \
types/LambdaTypeBinding.java \
types/NativeType.java \
types/NativeTypeBinding.java \
types/NullTypeBinding.java \
types/PointerTypeBinding.java \
Expand Down
Expand Up @@ -15,7 +15,9 @@
package com.google.devtools.j2objc.ast;

import com.google.devtools.j2objc.jdt.TreeConverter;
import com.google.devtools.j2objc.util.ElementUtil;
import java.util.List;
import javax.lang.model.element.Element;
import org.eclipse.jdt.core.dom.IBinding;

/**
Expand Down Expand Up @@ -58,6 +60,10 @@ public BodyDeclaration(IBinding binding) {
modifiers = binding.getModifiers();
}

public BodyDeclaration(Element element) {
modifiers = ElementUtil.fromModifierSet(element.getModifiers());
}

public int getModifiers() {
return modifiers;
}
Expand Down
Expand Up @@ -17,6 +17,7 @@
import org.eclipse.jdt.core.dom.IVariableBinding;
import com.google.devtools.j2objc.jdt.TreeConverter;
import java.util.List;
import javax.lang.model.element.VariableElement;

/**
* Node for a field declaration.
Expand Down Expand Up @@ -53,6 +54,12 @@ public FieldDeclaration(IVariableBinding variableBinding, Expression initializer
fragments.add(new VariableDeclarationFragment(variableBinding, initializer));
}

public FieldDeclaration(VariableElement variableElement, Expression initializer) {
super(variableElement);
type.set(Type.newType(variableElement.asType()));
fragments.add(new VariableDeclarationFragment(variableElement, initializer));
}

@Override
public Kind getKind() {
return Kind.FIELD_DECLARATION;
Expand Down
Expand Up @@ -30,6 +30,7 @@ public class FunctionDeclaration extends BodyDeclaration {
private final ChildList<SingleVariableDeclaration> parameters =
ChildList.create(SingleVariableDeclaration.class, this);
private final ChildLink<Block> body = ChildLink.create(Block.class, this);
//TODO(user): declaringClass should more properly be an Element.
private final TypeMirror declaringClass;
private String jniSignature = null;

Expand Down
Expand Up @@ -43,6 +43,11 @@ public NativeExpression(String code, ITypeBinding type) {
typeMirror = BindingConverter.getType(type);
}

public NativeExpression(String code, TypeMirror type) {
this.code = code;
typeMirror = type;
}

@Override
public Kind getKind() {
return Kind.NATIVE_EXPRESSION;
Expand Down
Expand Up @@ -44,6 +44,10 @@ public ThisExpression(ITypeBinding typeBinding) {
typeMirror = BindingConverter.getType(typeBinding);
}

public ThisExpression(TypeMirror typeMirror) {
this.typeMirror = typeMirror;
}

@Override
public Kind getKind() {
return Kind.THIS_EXPRESSION;
Expand Down
Expand Up @@ -24,51 +24,52 @@
*/
public abstract class VariableDeclaration extends TreeNode {

private IVariableBinding variableBinding;
private VariableElement variableElement;
private int extraDimensions = 0;
protected ChildLink<SimpleName> name = ChildLink.create(SimpleName.class, this);
protected ChildLink<Expression> initializer = ChildLink.create(Expression.class, this);

public VariableDeclaration(org.eclipse.jdt.core.dom.VariableDeclaration jdtNode) {
super(jdtNode);
variableBinding = BindingConverter.wrapBinding(jdtNode.resolveBinding());
IVariableBinding variableBinding = BindingConverter.wrapBinding(jdtNode.resolveBinding());
variableElement = (VariableElement) BindingConverter.getElement(variableBinding);
extraDimensions = jdtNode.getExtraDimensions();
name.set((SimpleName) TreeConverter.convert(jdtNode.getName()));
initializer.set((Expression) TreeConverter.convert(jdtNode.getInitializer()));
}

public VariableDeclaration(VariableDeclaration other) {
super(other);
variableBinding = other.getVariableBinding();
variableElement = other.getVariableElement();
extraDimensions = other.getExtraDimensions();
name.copyFrom(other.getName());
initializer.copyFrom(other.getInitializer());
}

public VariableDeclaration(IVariableBinding variableBinding, Expression initializer) {
super();
this.variableBinding = variableBinding;
variableElement = (VariableElement) BindingConverter.getElement(variableBinding);
name.set(new SimpleName(variableBinding));
this.initializer.set(initializer);
}

public VariableDeclaration(VariableElement variableElement, Expression initializer) {
super();
this.variableBinding = (IVariableBinding) BindingConverter.unwrapElement(variableElement);
this.variableElement = variableElement;
name.set(new SimpleName(variableElement));
this.initializer.set(initializer);
}

public IVariableBinding getVariableBinding() {
return variableBinding;
return (IVariableBinding) BindingConverter.unwrapElement(variableElement);
}

public VariableElement getVariableElement() {
return BindingConverter.getVariableElement(variableBinding);
return variableElement;
}

public void setVariableBinding(IVariableBinding newVariableBinding) {
variableBinding = newVariableBinding;
variableElement = (VariableElement) BindingConverter.getElement(newVariableBinding);
}

public int getExtraDimensions() {
Expand Down
Expand Up @@ -14,6 +14,7 @@

package com.google.devtools.j2objc.ast;

import javax.lang.model.element.VariableElement;
import org.eclipse.jdt.core.dom.IVariableBinding;

/**
Expand All @@ -34,6 +35,10 @@ public VariableDeclarationFragment(IVariableBinding variableBinding, Expression
super(variableBinding, initializer);
}

public VariableDeclarationFragment(VariableElement variableElement, Expression initializer) {
super(variableElement, initializer);
}

@Override
public Kind getKind() {
return Kind.VARIABLE_DECLARATION_FRAGMENT;
Expand Down
Expand Up @@ -14,6 +14,9 @@

package com.google.devtools.j2objc.jdt;

import com.google.devtools.j2objc.types.GeneratedVariableBinding;
import com.google.devtools.j2objc.types.GeneratedVariableElement;
import com.google.devtools.j2objc.types.NativeType;
import com.google.devtools.j2objc.types.NativeTypeBinding;
import com.google.devtools.j2objc.util.BindingUtil;

Expand All @@ -33,6 +36,7 @@
import java.util.Map;

import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.Name;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;
Expand Down Expand Up @@ -318,13 +322,21 @@ public static JdtPackageElement getPackageElement(
}

public static IBinding unwrapElement(Element element) {
if (element instanceof GeneratedVariableElement) {
return new GeneratedVariableBinding(element.toString(), 0, element.asType(),
element.getKind() == ElementKind.FIELD, element.getKind() == ElementKind.PARAMETER,
null, null);
}
return element != null ? ((JdtElement) element).binding : null;
}

public static IBinding unwrapTypeMirrorIntoBinding(TypeMirror t) {
if (t == null) {
return null;
}
if (t instanceof NativeType) {
return new NativeTypeBinding(((NativeType) t).toString());
}
return ((JdtTypeMirror) t).binding;
}

Expand Down
Expand Up @@ -23,6 +23,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.lang.model.element.Element;

/**
* Wrapper class around IBinding, allowing getKind() to be redefined by
Expand Down Expand Up @@ -51,6 +52,10 @@ public void addAnnotations(IBinding binding) {
annotations.addAll(Arrays.asList(binding.getAnnotations()));
}

public void addAnnotations(Element element) {
annotations.addAll(Arrays.asList(BindingConverter.unwrapElement(element).getAnnotations()));
}

@Deprecated
public IJavaElement getJavaElement() {
throw new AssertionError("not implemented");
Expand Down
Expand Up @@ -14,31 +14,25 @@

package com.google.devtools.j2objc.jdt;

import org.eclipse.jdt.core.dom.IAnnotationBinding;
import org.eclipse.jdt.core.dom.IBinding;

import com.google.devtools.j2objc.util.ElementUtil;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.Name;
import javax.lang.model.type.TypeMirror;
import org.eclipse.jdt.core.dom.IAnnotationBinding;
import org.eclipse.jdt.core.dom.IBinding;

abstract class JdtElement implements Element {
protected Name name;
protected int flags;
protected JdtBinding binding;

private static final Map<Integer, Set<Modifier>> modifierSets = new HashMap<>();

protected JdtElement(IBinding binding, String name, int flags) {
if (binding instanceof JdtBinding) {
this.binding = (JdtBinding) binding;
Expand All @@ -58,7 +52,7 @@ public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType)

@Override
public Set<Modifier> getModifiers() {
return toModifierSet(flags);
return ElementUtil.toModifierSet(flags);
}

@Override
Expand All @@ -84,57 +78,4 @@ public List<? extends AnnotationMirror> getAnnotationMirrors() {
public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
throw new AssertionError("not implemented");
}

private static Set<Modifier> toModifierSet(int modifiers) {
Set<Modifier> set = modifierSets.get(modifiers);
if (set == null) {
set = EnumSet.noneOf(Modifier.class);
if ((modifiers & java.lang.reflect.Modifier.PUBLIC) > 0) {
set.add(Modifier.PUBLIC);
}
if ((modifiers & java.lang.reflect.Modifier.PRIVATE) > 0) {
set.add(Modifier.PRIVATE);
}
if ((modifiers & java.lang.reflect.Modifier.PROTECTED) > 0) {
set.add(Modifier.PROTECTED);
}
if ((modifiers & java.lang.reflect.Modifier.STATIC) > 0) {
set.add(Modifier.STATIC);
}
if ((modifiers & java.lang.reflect.Modifier.FINAL) > 0) {
set.add(Modifier.FINAL);
}
if ((modifiers & java.lang.reflect.Modifier.SYNCHRONIZED) > 0) {
set.add(Modifier.SYNCHRONIZED);
}
if ((modifiers & java.lang.reflect.Modifier.VOLATILE) > 0) {
set.add(Modifier.VOLATILE);
}
if ((modifiers & java.lang.reflect.Modifier.TRANSIENT) > 0) {
set.add(Modifier.TRANSIENT);
}
if ((modifiers & java.lang.reflect.Modifier.NATIVE) > 0) {
set.add(Modifier.NATIVE);
}
if ((modifiers & java.lang.reflect.Modifier.ABSTRACT) > 0) {
set.add(Modifier.ABSTRACT);
}
if ((modifiers & java.lang.reflect.Modifier.STRICT) > 0) {
set.add(Modifier.STRICTFP);
}
// Indirectly check whether Modifier.DEFAULT exists, since it was
// added in Java 8.
if ((modifiers & org.eclipse.jdt.core.dom.Modifier.DEFAULT) > 0) {
try {
Modifier m = Modifier.valueOf("DEFAULT");
set.add(m);
} catch (IllegalArgumentException e) {
// Can only add DEFAULT modifier in Java 8.
}
}

modifierSets.put(modifiers, set);
}
return set;
}
}
Expand Up @@ -139,9 +139,9 @@ private void addOuterFields(AbstractTypeDeclaration node) {
ITypeBinding clazz = node.getTypeBinding();
assert clazz.getDeclaringClass() != null;

IVariableBinding outerFieldBinding = outerResolver.getOuterField(clazz);
if (outerFieldBinding != null) {
members.add(0, new FieldDeclaration(outerFieldBinding, null));
VariableElement outerFieldElement = outerResolver.getOuterField(clazz);
if (outerFieldElement != null) {
members.add(0, new FieldDeclaration(outerFieldElement, null));
}

List<IVariableBinding> innerFields = outerResolver.getInnerFields(clazz);
Expand Down Expand Up @@ -227,7 +227,7 @@ protected void addOuterParameters(
statements.add(0, superCall);
}
passOuterParamToSuper(typeNode, superCall, superType, outerParamBinding);
IVariableBinding outerField = outerResolver.getOuterField(type);
VariableElement outerField = outerResolver.getOuterField(type);
int idx = 0;
if (outerField != null) {
assert outerParamBinding != null;
Expand Down

0 comments on commit 2d5a689

Please sign in to comment.