From 2d50810a024b573e8ef59304d7eb06dd3500294c Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 22 Apr 2013 19:49:12 +0400 Subject: [PATCH] ClassMemberProcessor restructured --- .../resolve/java/provider/MembersCache.java | 125 ++++++++++-------- 1 file changed, 70 insertions(+), 55 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/MembersCache.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/MembersCache.java index 5972f315d50..b306dbd6dc7 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/MembersCache.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/provider/MembersCache.java @@ -38,7 +38,6 @@ import static com.intellij.psi.util.PsiFormatUtilBase.*; public final class MembersCache { private static final ImmutableSet OBJECT_METHODS = ImmutableSet.of("hashCode()", "equals(java.lang.Object)", "toString()"); - @NotNull private final Map namedMembersMap = new HashMap(); @Nullable @@ -135,6 +134,42 @@ public final class MembersCache { 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) { if (psiClass.getPsiClass().isEnum() && staticMembers) { return member.isStatic(); @@ -161,53 +196,40 @@ public final class MembersCache { return true; } - private void processFields() { - // Hack to load static members for enum class loaded from class file - if (kotlin && !psiClass.getPsiClass().isEnum()) { + private void processField(PsiField field) { + PsiFieldWrapper fieldWrapper = new PsiFieldWrapper(field); + + // group must be created even for excluded field + NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(fieldWrapper.getName())); + + if (!includeMember(fieldWrapper)) { return; } - for (PsiField field : psiClass.getPsiClass().getAllFields()) { - PsiFieldWrapper fieldWrapper = new PsiFieldWrapper(field); - // group must be created even for excluded field - NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(fieldWrapper.getName())); + TypeSource type = new TypeSource("", fieldWrapper.getType(), field); + namedMembers.addPropertyAccessor(new PropertyPsiDataElement(fieldWrapper, type, null)); + } - if (!includeMember(fieldWrapper)) { - continue; - } + private void processOwnMethod(PsiMethod ownMethod) { + PsiMethodWrapper method = new PsiMethodWrapper(ownMethod); - TypeSource type = new TypeSource("", fieldWrapper.getType(), field); - namedMembers.addPropertyAccessor(new PropertyPsiDataElement(fieldWrapper, type, null)); + if (!includeMember(method)) { + return; } - } - private void processMethods() { - parseAllMethodsAsProperties(); - processOwnMethods(); - } + PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName()); - private void processOwnMethods() { - for (PsiMethod ownMethod : psiClass.getPsiClass().getMethods()) { - PsiMethodWrapper method = new PsiMethodWrapper(ownMethod); + // TODO: remove getJavaClass + if (propertyParseResult != null && propertyParseResult.isGetter()) { + processGetter(ownMethod, method, propertyParseResult); + } + else if (propertyParseResult != null && !propertyParseResult.isGetter()) { + processSetter(method, propertyParseResult); + } - if (!includeMember(method)) { - continue; - } - - 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); - } + 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() { - for (PsiMethod method : psiClass.getPsiClass().getAllMethods()) { - createEmptyEntry(Name.identifier(method.getName())); + private void parseMethodAsProperty(PsiMethod method) { + createEmptyEntry(Name.identifier(method.getName())); - PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName()); - if (propertyParseResult != null) { - createEmptyEntry(Name.identifier(propertyParseResult.getPropertyName())); - } + PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName()); + if (propertyParseResult != null) { + createEmptyEntry(Name.identifier(propertyParseResult.getPropertyName())); } } @@ -302,15 +322,10 @@ public final class MembersCache { getOrCreateEmpty(identifier); } - private void processNestedClasses() { - if (!staticMembers) { - return; - } - for (PsiClass nested : psiClass.getPsiClass().getInnerClasses()) { - if (isSamInterface(nested)) { - NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(nested.getName())); - namedMembers.setSamInterface(nested); - } + private void processNestedClass(PsiClass nested) { + if (isSamInterface(nested)) { + NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(nested.getName())); + namedMembers.setSamInterface(nested); } } }