From 414f5ea2cbfacddfc2862c2455d7fdbf68cefafa Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Sun, 4 Nov 2012 23:14:43 +0400 Subject: [PATCH] Refactor: clean up ResolverScopeData and introduce Origin enum --- .../jet/lang/resolve/java/data/Origin.java | 22 +++++++ .../resolve/java/data/ResolverScopeData.java | 61 +++++++++++-------- 2 files changed, 57 insertions(+), 26 deletions(-) create mode 100644 compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/Origin.java diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/Origin.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/Origin.java new file mode 100644 index 00000000000..f4ef038cda4 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/Origin.java @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.java.data; + +public enum Origin { + JAVA, + KOTLIN +} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/ResolverScopeData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/ResolverScopeData.java index 86bab0cdb04..ab8595b5d64 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/ResolverScopeData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/data/ResolverScopeData.java @@ -27,34 +27,23 @@ import org.jetbrains.jet.lang.resolve.java.MembersCache; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; -/** -* @author Pavel Talanov -*/ +import static org.jetbrains.jet.lang.resolve.java.data.Origin.JAVA; +import static org.jetbrains.jet.lang.resolve.java.data.Origin.KOTLIN; + public abstract class ResolverScopeData { - @Nullable - public PsiClass getPsiClass() { - return psiClass; - } - @Nullable - public PsiPackage getPsiPackage() { - return psiPackage; - } - - public boolean isStaticMembers() { - return staticMembers; - } - - public boolean isKotlin() { - return kotlin; - } + private MembersCache membersCache = null; @Nullable private final PsiClass psiClass; + @Nullable private final PsiPackage psiPackage; + private final boolean staticMembers; - private final boolean kotlin; + + @NotNull + private final Origin origin; public ResolverScopeData( @Nullable PsiClass psiClass, @@ -72,14 +61,19 @@ public abstract class ResolverScopeData { } this.staticMembers = staticMembers; - this.kotlin = psiClass != null && DescriptorResolverUtils.isKotlinClass(psiClass); + this.origin = determineOrigin(psiClass); //TODO: move check to remove fqName parameter - if (fqName != null && fqName.lastSegmentIs(Name.identifier(JvmAbi.PACKAGE_CLASS)) && psiClass != null && kotlin) { + if (fqName != null && fqName.lastSegmentIs(Name.identifier(JvmAbi.PACKAGE_CLASS)) && psiClass != null && isKotlin()) { throw new IllegalStateException("Kotlin namespace cannot have last segment " + JvmAbi.PACKAGE_CLASS + ": " + fqName); } } + @NotNull + private static Origin determineOrigin(@Nullable PsiClass psiClass) { + return ((psiClass != null) && DescriptorResolverUtils.isKotlinClass(psiClass)) ? KOTLIN : JAVA; + } + @NotNull public PsiElement getPsiPackageOrPsiClass() { if (psiPackage != null) { @@ -90,14 +84,29 @@ public abstract class ResolverScopeData { return psiClass; } } - - private MembersCache membersCache = null; - @NotNull public MembersCache getMembersCache() { if (membersCache == null) { - membersCache = MembersCache.buildMembersByNameCache(psiClass, psiPackage, staticMembers, kotlin); + membersCache = MembersCache.buildMembersByNameCache(psiClass, psiPackage, staticMembers, isKotlin()); } return membersCache; } + + @Nullable + public PsiClass getPsiClass() { + return psiClass; + } + + @Nullable + public PsiPackage getPsiPackage() { + return psiPackage; + } + + public boolean isKotlin() { + return origin == KOTLIN; + } + + public boolean isStaticMembers() { + return staticMembers; + } }