@Override public boolean accept(Element e, TypeMirror t) { return (method == null || method == e.getEnclosingElement() || e.getModifiers().contains(FINAL) || EnumSet.of(LOCAL_VARIABLE, PARAMETER, EXCEPTION_PARAMETER, RESOURCE_VARIABLE).contains(e.getKind()) && controller.getSourceVersion().compareTo(SourceVersion.RELEASE_8) >= 0 && controller.getElementUtilities().isEffectivelyFinal((VariableElement)e)) && !illegalForwardRefs.containsKey(e.getSimpleName()); } };
@Override public boolean accept(Element e, TypeMirror t) { return (method == null || method == e.getEnclosingElement() || e.getModifiers().contains(FINAL) || EnumSet.of(LOCAL_VARIABLE, PARAMETER, EXCEPTION_PARAMETER, RESOURCE_VARIABLE).contains(e.getKind()) && controller.getSourceVersion().compareTo(SourceVersion.RELEASE_8) >= 0 && controller.getElementUtilities().isEffectivelyFinal((VariableElement)e)) && !illegalForwardRefs.containsKey(e.getSimpleName()); } };
/** * Finds the no-argument non-synthetic constructor in the specified class. */ static ExecutableElement getNoArgConstructor(CompilationController controller, TypeElement typeElement) { assert controller != null; assert typeElement != null; for (Element element : typeElement.getEnclosedElements()) { if (element.getKind() == ElementKind.CONSTRUCTOR) { ExecutableElement constructor = (ExecutableElement)element; if (constructor.getParameters().size() == 0 && !controller.getElementUtilities().isSynthetic(constructor)) { return constructor; } } } return null; } }
@Override public boolean accept(Element e, TypeMirror t) { return (method == null || method == e.getEnclosingElement() || e.getModifiers().contains(FINAL) || EnumSet.of(LOCAL_VARIABLE, PARAMETER, EXCEPTION_PARAMETER, RESOURCE_VARIABLE).contains(e.getKind()) && controller.getSourceVersion().compareTo(SourceVersion.RELEASE_8) >= 0 && controller.getElementUtilities().isEffectivelyFinal((VariableElement)e)) && !illegalForwardRefs.containsKey(e.getSimpleName()); } };
@Override public boolean accept(Element e, TypeMirror t) { return (method == null || method == e.getEnclosingElement() || e.getModifiers().contains(FINAL) || EnumSet.of(LOCAL_VARIABLE, PARAMETER, EXCEPTION_PARAMETER, RESOURCE_VARIABLE).contains(e.getKind()) && controller.getSourceVersion().compareTo(SourceVersion.RELEASE_8) >= 0 && controller.getElementUtilities().isEffectivelyFinal((VariableElement)e)) && !illegalForwardRefs.containsKey(e.getSimpleName()); } };
@Override public boolean accept(Element e, TypeMirror t) { switch (e.getKind()) { case LOCAL_VARIABLE: case RESOURCE_VARIABLE: case EXCEPTION_PARAMETER: case PARAMETER: return (method == e.getEnclosingElement() || e.getModifiers().contains(FINAL) || controller.getSourceVersion().compareTo(SourceVersion.RELEASE_8) >= 0 && controller.getElementUtilities().isEffectivelyFinal((VariableElement)e)) && (!illegalForwardRefs.containsKey(e.getSimpleName()) || illegalForwardRefs.get(e.getSimpleName()).getEnclosingElement() != e.getEnclosingElement()); case FIELD: if (illegalForwardRefs.containsValue(e)) { return false; } if (e.getSimpleName().contentEquals(THIS_KEYWORD) || e.getSimpleName().contentEquals(SUPER_KEYWORD)) { return !isStatic; } default: return (!isStatic || e.getModifiers().contains(STATIC)) && trees.isAccessible(scope, e, (DeclaredType) t); } } };
protected Set<Element> getChildSpecializes( Element productionElement, WebBeansModelImplementation model ) { TypeElement typeElement = model.getHelper().getCompilationController() .getElementUtilities().enclosingTypeElement(productionElement); Set<TypeElement> implementors = getImplementors(model, typeElement); implementors.remove( productionElement.getEnclosingElement()); Set<Element> specializeElements = new HashSet<Element>(); specializeElements.add(productionElement); for (TypeElement implementor : implementors) { inspectHierarchy(productionElement, implementor, specializeElements, model); } specializeElements.remove(productionElement); return specializeElements; }
public boolean isAccessible(Scope scope, Element member, TypeMirror type, boolean selectSuper) { if (!checkAccessibility) { return true; } if (type.getKind() != TypeKind.DECLARED) { return member.getModifiers().contains(PUBLIC); } if (getController().getTrees().isAccessible(scope, member, (DeclaredType) type)) { return true; } return selectSuper && member.getModifiers().contains(PROTECTED) && !member.getModifiers().contains(STATIC) && !member.getKind().isClass() && !member.getKind().isInterface() && getController().getTrees().isAccessible(scope, (TypeElement) ((DeclaredType) type).asElement()) && (member.getKind() != METHOD || getController().getElementUtilities().getImplementationOf((ExecutableElement) member, (TypeElement) ((DeclaredType) type).asElement()) == member); }
@Override public void run(CompilationController controller) throws Exception { controller.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED); if (implClass == null) { return; } TypeElement te = JavaUtils.findClassElementByBinaryName(implClass, controller); if (te == null) { return; } FactoryMethodFinder factoryMethodFinder = new FactoryMethodFinder( te, factoryMethodName, staticFlag, controller.getElementUtilities()); List<ExecutableElement> methods = factoryMethodFinder.findMethods(); if (methods.size() != 1) { return; } ExecutableElement method = methods.get(0); if (method.getReturnType().getKind() != TypeKind.DECLARED) { return; } wasClassResolved.set(true); DeclaredType dt = (DeclaredType) method.getReturnType(); resolvedClass[0] = ElementUtilities.getBinaryName((TypeElement) dt.asElement()); }
@Override protected void setContextElement( Element context, CompilationController controller ) { if ( context instanceof ExecutableElement ){ ExecutableElement method = (ExecutableElement) context; getShortElementName().append( context.getSimpleName().toString()); appendMethodParams(getShortElementName(), method); TypeElement enclosingType = controller.getElementUtilities(). enclosingTypeElement( context ); String typeFqn = enclosingType.getQualifiedName().toString(); getFqnElementName().append( typeFqn ); getFqnElementName().append('.'); getFqnElementName().append( context.getSimpleName().toString() ); appendMethodParams(getFqnElementName(), method); } else if ( context instanceof TypeElement ){ TypeElement type = (TypeElement) context; getShortElementName().append( type.getSimpleName().toString() ); getFqnElementName().append( type.getQualifiedName().toString() ); } }
boolean overridesMethod( ExecutableElement element, CompilationController controller ) { ExecutableElement exec = getElementHandle().resolve(controller); if ( exec == null ){ return false; } ExecutableElement overriddenMethod = exec; while ( true ){ overriddenMethod = controller.getElementUtilities().getOverriddenMethod(overriddenMethod); if ( overriddenMethod == null ){ break; } if ( overriddenMethod.equals( element )){ return true; } } return false; }
private void update( List<VariableElement> vars , CompilationController controller) { DefaultMutableTreeNode root = new DefaultMutableTreeNode(); for (VariableElement var : vars) { FileObject fileObject = SourceUtils.getFile(ElementHandle .create(var), controller.getClasspathInfo()); InjectableTreeNode<Element> node = new InjectableTreeNode<Element>(fileObject, var, (DeclaredType)controller.getElementUtilities(). enclosingTypeElement(var).asType(), false,controller); root.add( node ); } setRoot(root); }
private void addAttributeValues(Env env, Element element, AnnotationMirror annotation, ExecutableElement member) throws IOException { CompilationController controller = env.getController(); TreeUtilities tu = controller.getTreeUtilities(); ElementUtilities eu = controller.getElementUtilities(); for (javax.annotation.processing.Completion completion : SourceUtils.getAttributeValueCompletions(controller, element, annotation, member, env.getPrefix())) { String value = completion.getValue().trim(); if (value.length() > 0 && startsWith(env, value)) { TypeMirror type = member.getReturnType(); TypeElement typeElement = null; while (type.getKind() == TypeKind.ARRAY) { type = ((ArrayType) type).getComponentType(); } if (type.getKind() == TypeKind.DECLARED) { CharSequence fqn = ((TypeElement) ((DeclaredType) type).asElement()).getQualifiedName(); if (JAVA_LANG_CLASS.contentEquals(fqn)) { String name = value.endsWith(".class") ? value.substring(0, value.length() - 6) : value; //NOI18N TypeMirror tm = tu.parseType(name, eu.outermostTypeElement(element)); typeElement = tm != null && tm.getKind() == TypeKind.DECLARED ? (TypeElement) ((DeclaredType) tm).asElement() : null; if (typeElement != null && startsWith(env, typeElement.getSimpleName().toString())) { env.addToExcludes(typeElement); } } } results.add(itemFactory.createAttributeValueItem(env.getController(), value, completion.getMessage(), typeElement, anchorOffset, env.getReferencesCount())); } } }
protected DeclaredType getParent( Element element , DeclaredType parentType) throws DefinitionError { DeclaredType parent = parentType; if ( parent == null ){ TypeElement type = getModel().getHelper().getCompilationController(). getElementUtilities().enclosingTypeElement(element); boolean isDeclaredType = ( type.asType() instanceof DeclaredType ); if ( isDeclaredType ){ parent = (DeclaredType)type.asType(); } else { throw new DefinitionError( type ); } } return parent; }
private void update( List<ExecutableElement> methods , CompilationController controller) { DefaultMutableTreeNode root = new DefaultMutableTreeNode(); Map<Element, InjectableTreeNode<? extends Element>> methodsMap= new LinkedHashMap<Element, InjectableTreeNode<? extends Element>>(); for (ExecutableElement method : methods) { FileObject fileObject = SourceUtils.getFile(ElementHandle .create(method), controller.getClasspathInfo()); MethodTreeNode node = new MethodTreeNode(fileObject, method, (DeclaredType)controller.getElementUtilities(). enclosingTypeElement(method).asType(), false, controller); insertTreeNode( methodsMap , method , node , root , controller); } setRoot(root); }
@Override public void run(CompilationController cc) throws Exception { TypeElement type = JavaUtils.findClassElementByBinaryName(className, cc); if (type == null) { return; } elementFound.set(true); Property[] props = new PropertyFinder( type.asType(), propName, cc.getElementUtilities(), MatchType.PREFIX).findProperties(); if (props.length > 0 && props[0].getSetter() != null) { ElementOpen.open(cc.getClasspathInfo(), props[0].getSetter()); } } }
static void visitSpecializes( ExecutableElement method, AnnotationModelHelper helper , SpecializeVisitor visitor ) { ExecutableElement current = method; while ( true ){ ExecutableElement overridenElement = helper.getCompilationController(). getElementUtilities().getOverriddenMethod( current); if ( overridenElement != null && AnnotationObjectProvider.hasSpecializes( current, helper)) { if ( visitor.visit(overridenElement)){ return; } current = overridenElement; } else { break; } } }
private void addPackageContent(final Env env, PackageElement pe, EnumSet<ElementKind> kinds, DeclaredType baseType, boolean insideNew, boolean insidePkgStmt) throws IOException { Set<? extends TypeMirror> smartTypes = options.contains(Options.ALL_COMPLETION) ? null : getSmartTypes(env); CompilationController controller = env.getController(); Elements elements = controller.getElements(); Types types = controller.getTypes(); Trees trees = controller.getTrees(); ElementUtilities eu = controller.getElementUtilities(); Scope scope = env.getScope(); for (Element e : pe.getEnclosedElements()) { if (e.getKind().isClass() || e.getKind().isInterface()) { String name = e.getSimpleName().toString(); if ((env.getExcludes() == null || !env.getExcludes().contains(e)) && startsWith(env, name) && (Utilities.isShowDeprecatedMembers() || !elements.isDeprecated(e)) && trees.isAccessible(scope, (TypeElement) e) && isOfKindAndType(e.asType(), e, kinds, baseType, scope, trees, types) && !Utilities.isExcluded(eu.getElementName(e, true))) { results.add(itemFactory.createTypeItem(env.getController(), (TypeElement) e, (DeclaredType) e.asType(), anchorOffset, null, elements.isDeprecated(e), insideNew, insideNew || env.isInsideClass(), true, isOfSmartType(env, e.asType(), smartTypes), false)); } } } String pkgName = pe.getQualifiedName() + "."; //NOI18N addPackages(env, pkgName, insidePkgStmt); }
private void addThisOrSuperConstructor(final Env env, final TypeMirror type, final Element elem, final String name, final ExecutableElement toExclude) throws IOException { final CompilationController controller = env.getController(); final Elements elements = controller.getElements(); final Types types = controller.getTypes(); final Trees trees = controller.getTrees(); final Scope scope = env.getScope(); ElementUtilities.ElementAcceptor acceptor = new ElementUtilities.ElementAcceptor() { @Override public boolean accept(Element e, TypeMirror t) { switch (e.getKind()) { case CONSTRUCTOR: return toExclude != e && (Utilities.isShowDeprecatedMembers() || !elements.isDeprecated(e)) && (trees.isAccessible(scope, e, (DeclaredType) t) || (elem.getModifiers().contains(ABSTRACT) && !e.getModifiers().contains(PRIVATE))); } return false; } }; for (Element e : controller.getElementUtilities().getMembers(type, acceptor)) { if (e.getKind() == CONSTRUCTOR) { ExecutableType et = (ExecutableType) asMemberOf(e, type, types); results.add(itemFactory.createThisOrSuperConstructorItem(env.getController(), (ExecutableElement) e, et, anchorOffset, elements.isDeprecated(e), name)); } } }
@Override public Collection<AnnotationMirror> getInterceptorBindings( Element element ){ final InterceptorBindingChecker interceptorChecker = new InterceptorBindingChecker( getModel().getHelper() ); final StereotypeChecker stereotypeChecker = new StereotypeChecker( getModel().getHelper().getHelper()); TransitiveAnnotationHandler handler = new IntereptorBindingHandler( interceptorChecker, stereotypeChecker); Set<AnnotationMirror> result = new HashSet<AnnotationMirror>(); transitiveVisitAnnotatedElements(element, result, getModel().getHelper().getHelper(), handler); if ( element.getKind() == ElementKind.METHOD ){ TypeElement enclosedClass = getCompilationController(). getElementUtilities().enclosingTypeElement(element); Collection<AnnotationMirror> classBindings = getInterceptorBindings( enclosedClass ); result.addAll( classBindings ); } return result; }