Skip to content

Commit

Permalink
Migrate PackageInfoRewriter to new type system.
Browse files Browse the repository at this point in the history
	Change on 2016/11/02 by kstanger <kstanger@google.com>

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137946685
  • Loading branch information
kstanger authored and tomball committed Nov 4, 2016
1 parent d1e1732 commit 0161323
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 20 deletions.
Expand Up @@ -23,18 +23,16 @@
import com.google.devtools.j2objc.ast.StringLiteral; import com.google.devtools.j2objc.ast.StringLiteral;
import com.google.devtools.j2objc.ast.TreeUtil; import com.google.devtools.j2objc.ast.TreeUtil;
import com.google.devtools.j2objc.ast.TypeDeclaration; import com.google.devtools.j2objc.ast.TypeDeclaration;
import com.google.devtools.j2objc.jdt.BindingConverter; import com.google.devtools.j2objc.types.GeneratedExecutableElement;
import com.google.devtools.j2objc.types.GeneratedMethodBinding; import com.google.devtools.j2objc.types.GeneratedTypeElement;
import com.google.devtools.j2objc.types.GeneratedTypeBinding;
import com.google.devtools.j2objc.types.Types; import com.google.devtools.j2objc.types.Types;
import com.google.devtools.j2objc.util.BindingUtil;
import com.google.devtools.j2objc.util.ElementUtil; import com.google.devtools.j2objc.util.ElementUtil;
import com.google.devtools.j2objc.util.NameTable; import com.google.devtools.j2objc.util.NameTable;
import com.google.devtools.j2objc.util.TranslationUtil; import com.google.devtools.j2objc.util.TranslationUtil;
import com.google.j2objc.annotations.ObjectiveCName; import com.google.j2objc.annotations.ObjectiveCName;

import javax.lang.model.element.ExecutableElement;
import org.eclipse.jdt.core.dom.ITypeBinding; import javax.lang.model.element.Modifier;
import org.eclipse.jdt.core.dom.Modifier; import javax.lang.model.element.TypeElement;


/** /**
* Creates a TypeDeclaration for a package-info.java file. * Creates a TypeDeclaration for a package-info.java file.
Expand Down Expand Up @@ -65,15 +63,13 @@ private void run() {
return; return;
} }


GeneratedTypeBinding typeBinding = new GeneratedTypeBinding( TypeElement typeElement =
NameTable.PACKAGE_INFO_CLASS_NAME, pkg.getPackageElement(), typeEnv.getNSObject(), false, GeneratedTypeElement.newPackageInfoClass(pkg.getPackageElement(), typeEnv);
null); TypeDeclaration typeDecl = new TypeDeclaration(typeElement);
typeBinding.setModifiers(Modifier.PRIVATE);
TypeDeclaration typeDecl = new TypeDeclaration(BindingConverter.getTypeElement(typeBinding));
TreeUtil.moveList(pkg.getAnnotations(), typeDecl.getAnnotations()); TreeUtil.moveList(pkg.getAnnotations(), typeDecl.getAnnotations());


if (prefix != null) { if (prefix != null) {
typeDecl.addBodyDeclaration(createPrefixMethod(prefix, typeBinding)); typeDecl.addBodyDeclaration(createPrefixMethod(prefix, typeElement));
} }


unit.addType(0, typeDecl); unit.addType(0, typeDecl);
Expand All @@ -87,10 +83,11 @@ private static String getPackagePrefix(PackageDeclaration pkg) {
return null; return null;
} }


private MethodDeclaration createPrefixMethod(String prefix, ITypeBinding type) { private MethodDeclaration createPrefixMethod(String prefix, TypeElement type) {
GeneratedMethodBinding binding = GeneratedMethodBinding.newMethod( ExecutableElement element = GeneratedExecutableElement.newMethodWithSelector(
"__prefix", Modifier.STATIC | BindingUtil.ACC_SYNTHETIC, typeEnv.getNSString(), type); "__prefix", typeEnv.resolveJavaTypeMirror("java.lang.String"), type)
MethodDeclaration method = new MethodDeclaration(binding); .addModifiers(Modifier.STATIC);
MethodDeclaration method = new MethodDeclaration(element);
method.setHasDeclaration(false); method.setHasDeclaration(false);
Block body = new Block(); Block body = new Block();
method.setBody(body); method.setBody(body);
Expand Down
Expand Up @@ -17,6 +17,7 @@
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.devtools.j2objc.jdt.BindingConverter; import com.google.devtools.j2objc.jdt.BindingConverter;
import com.google.devtools.j2objc.util.ElementUtil; import com.google.devtools.j2objc.util.ElementUtil;
import com.google.devtools.j2objc.util.NameTable;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
Expand All @@ -26,8 +27,10 @@
import javax.lang.model.element.Element; import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind; import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ElementVisitor; import javax.lang.model.element.ElementVisitor;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.Name; import javax.lang.model.element.Name;
import javax.lang.model.element.NestingKind; import javax.lang.model.element.NestingKind;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement; import javax.lang.model.element.TypeElement;
import javax.lang.model.element.TypeParameterElement; import javax.lang.model.element.TypeParameterElement;
import javax.lang.model.type.DeclaredType; import javax.lang.model.type.DeclaredType;
Expand Down Expand Up @@ -64,6 +67,13 @@ public static GeneratedTypeElement mutableCopy(TypeElement element) {
element.getSuperclass(), element.getNestingKind(), ElementUtil.isSynthetic(element)); element.getSuperclass(), element.getNestingKind(), ElementUtil.isSynthetic(element));
} }


public static GeneratedTypeElement newPackageInfoClass(PackageElement pkgElem, Types typeEnv) {
return (GeneratedTypeElement) new GeneratedTypeElement(
NameTable.PACKAGE_INFO_CLASS_NAME, ElementKind.CLASS, pkgElem,
typeEnv.getJavaObjectElement().asType(), NestingKind.TOP_LEVEL, false)
.addModifiers(Modifier.PRIVATE);
}

private static ElementKind checkElementKind(ElementKind kind) { private static ElementKind checkElementKind(ElementKind kind) {
Preconditions.checkArgument(kind.isClass() || kind.isInterface()); Preconditions.checkArgument(kind.isClass() || kind.isInterface());
return kind; return kind;
Expand Down Expand Up @@ -173,8 +183,6 @@ public <R, P> R accept(TypeVisitor<R, P> v, P p) {
*/ */
public class Binding extends AbstractTypeBinding implements ITypeBinding { public class Binding extends AbstractTypeBinding implements ITypeBinding {


private final IPackageBinding packageBinding = new GeneratedPackageBinding("");

public TypeElement asElement() { public TypeElement asElement() {
return GeneratedTypeElement.this; return GeneratedTypeElement.this;
} }
Expand Down Expand Up @@ -240,7 +248,11 @@ public ITypeBinding[] getInterfaces() {


@Override @Override
public IPackageBinding getPackage() { public IPackageBinding getPackage() {
return packageBinding; Element e = GeneratedTypeElement.this.getEnclosingElement();
while (e != null && e.getKind() != ElementKind.PACKAGE) {
e = e.getEnclosingElement();
}
return (IPackageBinding) BindingConverter.unwrapElement(e);
} }


@Override @Override
Expand Down

0 comments on commit 0161323

Please sign in to comment.