ClassMemberProcessor restructured
This commit is contained in:
+70
-55
@@ -38,7 +38,6 @@ import static com.intellij.psi.util.PsiFormatUtilBase.*;
|
|||||||
public final class MembersCache {
|
public final class MembersCache {
|
||||||
private static final ImmutableSet<String> OBJECT_METHODS = ImmutableSet.of("hashCode()", "equals(java.lang.Object)", "toString()");
|
private static final ImmutableSet<String> OBJECT_METHODS = ImmutableSet.of("hashCode()", "equals(java.lang.Object)", "toString()");
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private final Map<Name, NamedMembers> namedMembersMap = new HashMap<Name, NamedMembers>();
|
private final Map<Name, NamedMembers> namedMembersMap = new HashMap<Name, NamedMembers>();
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -135,6 +134,42 @@ public final class MembersCache {
|
|||||||
processNestedClasses();
|
processNestedClasses();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processFields() {
|
||||||
|
// Hack to load static members for enum class loaded from class file
|
||||||
|
if (kotlin && !psiClass.getPsiClass().isEnum()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (PsiField field : psiClass.getPsiClass().getAllFields()) {
|
||||||
|
processField(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processMethods() {
|
||||||
|
parseAllMethodsAsProperties();
|
||||||
|
processOwnMethods();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processOwnMethods() {
|
||||||
|
for (PsiMethod ownMethod : psiClass.getPsiClass().getMethods()) {
|
||||||
|
processOwnMethod(ownMethod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void parseAllMethodsAsProperties() {
|
||||||
|
for (PsiMethod method : psiClass.getPsiClass().getAllMethods()) {
|
||||||
|
parseMethodAsProperty(method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processNestedClasses() {
|
||||||
|
if (!staticMembers) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (PsiClass nested : psiClass.getPsiClass().getInnerClasses()) {
|
||||||
|
processNestedClass(nested);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean includeMember(PsiMemberWrapper member) {
|
private boolean includeMember(PsiMemberWrapper member) {
|
||||||
if (psiClass.getPsiClass().isEnum() && staticMembers) {
|
if (psiClass.getPsiClass().isEnum() && staticMembers) {
|
||||||
return member.isStatic();
|
return member.isStatic();
|
||||||
@@ -161,53 +196,40 @@ public final class MembersCache {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processFields() {
|
private void processField(PsiField field) {
|
||||||
// Hack to load static members for enum class loaded from class file
|
PsiFieldWrapper fieldWrapper = new PsiFieldWrapper(field);
|
||||||
if (kotlin && !psiClass.getPsiClass().isEnum()) {
|
|
||||||
|
// group must be created even for excluded field
|
||||||
|
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(fieldWrapper.getName()));
|
||||||
|
|
||||||
|
if (!includeMember(fieldWrapper)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (PsiField field : psiClass.getPsiClass().getAllFields()) {
|
|
||||||
PsiFieldWrapper fieldWrapper = new PsiFieldWrapper(field);
|
|
||||||
|
|
||||||
// group must be created even for excluded field
|
TypeSource type = new TypeSource("", fieldWrapper.getType(), field);
|
||||||
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(fieldWrapper.getName()));
|
namedMembers.addPropertyAccessor(new PropertyPsiDataElement(fieldWrapper, type, null));
|
||||||
|
}
|
||||||
|
|
||||||
if (!includeMember(fieldWrapper)) {
|
private void processOwnMethod(PsiMethod ownMethod) {
|
||||||
continue;
|
PsiMethodWrapper method = new PsiMethodWrapper(ownMethod);
|
||||||
}
|
|
||||||
|
|
||||||
TypeSource type = new TypeSource("", fieldWrapper.getType(), field);
|
if (!includeMember(method)) {
|
||||||
namedMembers.addPropertyAccessor(new PropertyPsiDataElement(fieldWrapper, type, null));
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void processMethods() {
|
PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName());
|
||||||
parseAllMethodsAsProperties();
|
|
||||||
processOwnMethods();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processOwnMethods() {
|
// TODO: remove getJavaClass
|
||||||
for (PsiMethod ownMethod : psiClass.getPsiClass().getMethods()) {
|
if (propertyParseResult != null && propertyParseResult.isGetter()) {
|
||||||
PsiMethodWrapper method = new PsiMethodWrapper(ownMethod);
|
processGetter(ownMethod, method, propertyParseResult);
|
||||||
|
}
|
||||||
|
else if (propertyParseResult != null && !propertyParseResult.isGetter()) {
|
||||||
|
processSetter(method, propertyParseResult);
|
||||||
|
}
|
||||||
|
|
||||||
if (!includeMember(method)) {
|
if (!method.getJetMethodAnnotation().hasPropertyFlag()) {
|
||||||
continue;
|
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(method.getName()));
|
||||||
}
|
namedMembers.addMethod(method);
|
||||||
|
|
||||||
PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName());
|
|
||||||
|
|
||||||
// TODO: remove getJavaClass
|
|
||||||
if (propertyParseResult != null && propertyParseResult.isGetter()) {
|
|
||||||
processGetter(ownMethod, method, propertyParseResult);
|
|
||||||
}
|
|
||||||
else if (propertyParseResult != null && !propertyParseResult.isGetter()) {
|
|
||||||
processSetter(method, propertyParseResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!method.getJetMethodAnnotation().hasPropertyFlag()) {
|
|
||||||
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(method.getName()));
|
|
||||||
namedMembers.addMethod(method);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,14 +309,12 @@ public final class MembersCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void parseAllMethodsAsProperties() {
|
private void parseMethodAsProperty(PsiMethod method) {
|
||||||
for (PsiMethod method : psiClass.getPsiClass().getAllMethods()) {
|
createEmptyEntry(Name.identifier(method.getName()));
|
||||||
createEmptyEntry(Name.identifier(method.getName()));
|
|
||||||
|
|
||||||
PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName());
|
PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName());
|
||||||
if (propertyParseResult != null) {
|
if (propertyParseResult != null) {
|
||||||
createEmptyEntry(Name.identifier(propertyParseResult.getPropertyName()));
|
createEmptyEntry(Name.identifier(propertyParseResult.getPropertyName()));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,15 +322,10 @@ public final class MembersCache {
|
|||||||
getOrCreateEmpty(identifier);
|
getOrCreateEmpty(identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processNestedClasses() {
|
private void processNestedClass(PsiClass nested) {
|
||||||
if (!staticMembers) {
|
if (isSamInterface(nested)) {
|
||||||
return;
|
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(nested.getName()));
|
||||||
}
|
namedMembers.setSamInterface(nested);
|
||||||
for (PsiClass nested : psiClass.getPsiClass().getInnerClasses()) {
|
|
||||||
if (isSamInterface(nested)) {
|
|
||||||
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(nested.getName()));
|
|
||||||
namedMembers.setSamInterface(nested);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user