Package org.immutables.generator
Class SourceOrdering
- java.lang.Object
-
- org.immutables.generator.SourceOrdering
-
public final class SourceOrdering extends java.lang.ObjectUtility that abstracts away hacks to retrieve elements in source order. Currently, Javac returns elements in proper source order, but EJC returns elements in alphabetical order.- Bug 300408 - TypeElement.getEnclosedElements does not respect source order
- JDK-6884227 : Clarify ordering requirements of javax.lang.model.TypeElement.getEnclosedElements
Based on a workaround idea provided by Christian Humer NOTE: The Eclipse bug is fixed, and this workaround can be disabled by setting the system property
org.immutables.disableEclipseOrderingProvider=true.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceSourceOrdering.AccessorProviderprivate static classSourceOrdering.EclipseCompilerOrderingProviderThis inner static class will fail to load if Eclipse compliler classes will not be in classpath.private static classSourceOrdering.IsParameterlessNonstaticNonobjectprivate static interfaceSourceOrdering.OrderingProviderprivate static classSourceOrdering.ToSimpleName
-
Field Summary
Fields Modifier and Type Field Description private static SourceOrdering.OrderingProviderDEFAULT_PROVIDERprivate static SourceOrdering.OrderingProviderPROVIDER
-
Constructor Summary
Constructors Modifier Constructor Description privateSourceOrdering()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static SourceOrdering.OrderingProvidercreateProvider()private static java.util.List<javax.lang.model.element.ExecutableElement>disambiguateMethods(java.lang.Iterable<? extends javax.lang.model.element.ExecutableElement> methods)static com.google.common.collect.Ordering<javax.lang.model.element.Element>enclosedBy(javax.lang.model.element.Element element)static SourceOrdering.AccessorProvidergetAllAccessorsProvider(javax.lang.model.util.Elements elements, javax.lang.model.util.Types types, javax.lang.model.element.TypeElement originatingType)While we haveSourceOrdering, there's still a problem: We have inheritance hierarchy and we want to have all defined or inherited accessors returned as members of target type, likeElements.getAllMembers(TypeElement), but we need to have them properly and stably sorted.static com.google.common.collect.ImmutableList<javax.lang.model.element.Element>getEnclosedElements(javax.lang.model.element.Element element)(package private) static booleanisJavaLangObject(javax.lang.model.element.TypeElement element)
-
-
-
Field Detail
-
DEFAULT_PROVIDER
private static final SourceOrdering.OrderingProvider DEFAULT_PROVIDER
-
PROVIDER
private static final SourceOrdering.OrderingProvider PROVIDER
-
-
Method Detail
-
getEnclosedElements
public static com.google.common.collect.ImmutableList<javax.lang.model.element.Element> getEnclosedElements(javax.lang.model.element.Element element)
-
enclosedBy
public static com.google.common.collect.Ordering<javax.lang.model.element.Element> enclosedBy(javax.lang.model.element.Element element)
-
createProvider
private static SourceOrdering.OrderingProvider createProvider()
-
getAllAccessorsProvider
public static SourceOrdering.AccessorProvider getAllAccessorsProvider(javax.lang.model.util.Elements elements, javax.lang.model.util.Types types, javax.lang.model.element.TypeElement originatingType)
While we haveSourceOrdering, there's still a problem: We have inheritance hierarchy and we want to have all defined or inherited accessors returned as members of target type, likeElements.getAllMembers(TypeElement), but we need to have them properly and stably sorted. This implementation doesn't try to correctly resolve order for accessors inherited from different supertypes(interfaces), just something that stable and reasonable wrt source ordering without handling complex cases.- Parameters:
elements- the elements utilitytypes- the types utilityoriginatingType- the type to traverse- Returns:
- provider of all accessors in source order and mapping
-
disambiguateMethods
private static java.util.List<javax.lang.model.element.ExecutableElement> disambiguateMethods(java.lang.Iterable<? extends javax.lang.model.element.ExecutableElement> methods)
-
isJavaLangObject
static boolean isJavaLangObject(javax.lang.model.element.TypeElement element)
-
-