public static ElementHandle<?> create(Element elt) { ElementKind kind = elt.getKind(); switch (kind) { case FIELD: { VariableElement variableElt = (VariableElement)elt; return Field.create(variableElt); } case CLASS: { TypeElement typeElt = (TypeElement)elt; return Type.create(typeElt); } case PACKAGE: { PackageElement packageElt = (PackageElement)elt; return Package.create(packageElt); } case METHOD: { ExecutableElement packageElt = (ExecutableElement)elt; return Method.create(packageElt); } default: throw new UnsupportedOperationException("Element " + elt + " with kind " + kind + " not supported"); } }
public static Field create(VariableElement elt) { TypeElement typeElt = (TypeElement)elt.getEnclosingElement(); String name = elt.getSimpleName().toString(); Name fqn = Name.parse(typeElt.getQualifiedName().toString()); return new Field(fqn, name); }
@Override protected void doProcess(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { if (count.getAndIncrement() == 0) { ElementHandle.Field index = ElementHandle.Field.create("plugin.template.completion.A", "index"); VariableElement indexElt = index.get(processingEnv); AnnotationMirror pathAnn = indexElt.getAnnotationMirrors().get(0); TypeElement annotationTypeElement = (TypeElement)pathAnn.getAnnotationType().asElement(); ExecutableElement value = (ExecutableElement)annotationTypeElement.getEnclosedElements().get(0); for (Completion completion : getCompletions(indexElt, pathAnn, value, test[0])) { completions.add(completion.getValue()); } } } });
@Test public void testReferences() throws Exception { ElementHandle.Field templateField = ElementHandle.Field.create("metamodel.template.A", "template"); CompilerAssert<File, File> helper = compiler("metamodel.template"); File templates = helper.getSourcePath().getPath("metamodel", "template", "templates");
@Test public void testReferences() throws Exception { ElementHandle.Field templateField = ElementHandle.Field.create("metamodel.template.A", "template"); CompilerAssert<File, File> helper = compiler("metamodel.template"); File templates = helper.getSourcePath().getPath("metamodel", "template", "templates");
public static ElementHandle<?> create(Element elt) { ElementKind kind = elt.getKind(); switch (kind) { case FIELD: { VariableElement variableElt = (VariableElement)elt; return Field.create(variableElt); } case CLASS: { TypeElement typeElt = (TypeElement)elt; return Type.create(typeElt); } case PACKAGE: { PackageElement packageElt = (PackageElement)elt; return Package.create(packageElt); } case METHOD: { ExecutableElement packageElt = (ExecutableElement)elt; return Method.create(packageElt); } default: throw new UnsupportedOperationException("Element " + elt + " with kind " + kind + " not supported"); } }
/** * Compute and return the {@link Element} referencing this template. * * @return the elements referencing this template */ public Element[] getReferencingElements() { Set<Name> types = new LinkedHashSet<Name>(); for (ElementMetaModel ref : getElementReferences()) { ElementHandle.Field handle = ref.getElement(); types.add(handle.getTypeName()); } final Element[] elements = new Element[types.size()]; int index = 0; for (Name type : types) { elements[index++] = container.application.getProcessingContext().getTypeElement(type); } return elements; }
/** * Compute and return the {@link Element} referencing this template. * * @return the elements referencing this template */ public Element[] getReferencingElements() { Set<Name> types = new LinkedHashSet<Name>(); for (ElementMetaModel ref : getElementReferences()) { ElementHandle.Field handle = ref.getElement(); types.add(handle.getTypeName()); } final Element[] elements = new Element[types.size()]; int index = 0; for (Name type : types) { elements[index++] = container.application.getProcessingContext().getTypeElement(type); } return elements; }
@Override public void processAnnotationAdded(ApplicationMetaModel application, AnnotationKey key, AnnotationState added) { if (key.getType().toString().equals(juzu.Path.class.getName())) { if (key.getElement() instanceof ElementHandle.Field) { ElementHandle.Field variableElt = (ElementHandle.Field)key.getElement(); TemplateContainerMetaModel templates = application.getChild(TemplateContainerMetaModel.KEY); Path addedPath = Path.parse((String)added.get("value")); Path.Absolute absAdded = templates.resolvePath(addedPath); application.processingContext.info("Adding template ref " + variableElt.getTypeName() + "#" + variableElt.getName() + " " + absAdded); templates.add(variableElt, absAdded); } else { throw MetaModelProcessor.ANNOTATION_UNSUPPORTED.failure(key); } } }
@Override public void processAnnotationAdded(ApplicationMetaModel application, AnnotationKey key, AnnotationState added) { if (key.getType().toString().equals(juzu.Path.class.getName())) { if (key.getElement() instanceof ElementHandle.Field) { ElementHandle.Field variableElt = (ElementHandle.Field)key.getElement(); TemplateContainerMetaModel templates = application.getChild(TemplateContainerMetaModel.KEY); Path addedPath = Path.parse((String)added.get("value")); Path.Absolute absAdded = templates.resolvePath(addedPath); application.processingContext.info("Adding template ref " + variableElt.getTypeName() + "#" + variableElt.getName() + " " + absAdded); templates.add(variableElt, absAdded); } else { throw MetaModelProcessor.ANNOTATION_UNSUPPORTED.failure(key); } } }
public static Field create(Name fqn, String name) { return new Field(fqn, name); }
public static Field create(Name fqn, String name) { return new Field(fqn, name); }
public static Field create(String fqn, String name) { return new Field(Name.parse(fqn), name); }
public static Field create(String fqn, String name) { return new Field(Name.parse(fqn), name); }
@Override protected void doProcess(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { if (count.getAndIncrement() == 0) { ElementHandle.Field index = ElementHandle.Field.create("plugin.template.completion.A", "index"); VariableElement indexElt = index.get(processingEnv); AnnotationMirror pathAnn = indexElt.getAnnotationMirrors().get(0); TypeElement annotationTypeElement = (TypeElement)pathAnn.getAnnotationType().asElement(); ExecutableElement value = (ExecutableElement)annotationTypeElement.getEnclosedElements().get(0); for (Completion completion : getCompletions(indexElt, pathAnn, value, test[0])) { completions.add(completion.getValue()); } } } });
@Override public void processAnnotationRemoved(ApplicationMetaModel metaModel, AnnotationKey key, AnnotationState removed) { if (key.getType().toString().equals(juzu.Path.class.getName())) { if (key.getElement() instanceof ElementHandle.Field) { ElementHandle.Field variableElt = (ElementHandle.Field)key.getElement(); TemplateContainerMetaModel templates = metaModel.getChild(TemplateContainerMetaModel.KEY); Path removedPath = Path.parse((String)removed.get("value")); Path.Absolute absRemoved = templates.resolvePath(removedPath); metaModel.processingContext.info("Removing template ref " + variableElt.getTypeName() + "#" + variableElt.getName() + " " + absRemoved); templates.remove(variableElt); } } }
@Override public void processAnnotationRemoved(ApplicationMetaModel metaModel, AnnotationKey key, AnnotationState removed) { if (key.getType().toString().equals(juzu.Path.class.getName())) { if (key.getElement() instanceof ElementHandle.Field) { ElementHandle.Field variableElt = (ElementHandle.Field)key.getElement(); TemplateContainerMetaModel templates = metaModel.getChild(TemplateContainerMetaModel.KEY); Path removedPath = Path.parse((String)removed.get("value")); Path.Absolute absRemoved = templates.resolvePath(removedPath); metaModel.processingContext.info("Removing template ref " + variableElt.getTypeName() + "#" + variableElt.getName() + " " + absRemoved); templates.remove(variableElt); } } }
public static Field create(VariableElement elt) { TypeElement typeElt = (TypeElement)elt.getEnclosingElement(); String name = elt.getSimpleName().toString(); Name fqn = Name.parse(typeElt.getQualifiedName().toString()); return new Field(fqn, name); }