diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaArrayType.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaArrayType.java index edf6c64b859..a6be632baa3 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaArrayType.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaArrayType.java @@ -19,7 +19,7 @@ package org.jetbrains.jet.lang.resolve.java.structure; import com.intellij.psi.PsiArrayType; import org.jetbrains.annotations.NotNull; -public class JavaArrayType extends JavaType { +public class JavaArrayType extends JavaTypeImpl { public JavaArrayType(@NotNull PsiArrayType psiArrayType) { super(psiArrayType); } @@ -37,6 +37,6 @@ public class JavaArrayType extends JavaType { @NotNull public JavaType getComponentType() { - return JavaType.create(getPsi().getComponentType()); + return JavaTypeImpl.create(getPsi().getComponentType()); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifierType.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifierType.java index db5dd79ea25..06d4ac661c4 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifierType.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifierType.java @@ -29,7 +29,7 @@ import java.util.List; import static org.jetbrains.jet.lang.resolve.java.structure.JavaElementCollectionFromPsiArrayUtil.types; -public class JavaClassifierType extends JavaType { +public class JavaClassifierType extends JavaTypeImpl { private static class ResolutionResult { private final JavaClassifier classifier; private final JavaTypeSubstitutor substitutor; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaElementCollectionFromPsiArrayUtil.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaElementCollectionFromPsiArrayUtil.java index 7a5b4791f88..a694b5c2dfc 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaElementCollectionFromPsiArrayUtil.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaElementCollectionFromPsiArrayUtil.java @@ -94,7 +94,7 @@ public class JavaElementCollectionFromPsiArrayUtil { if (types.length == 0) return Collections.emptyList(); List result = new ArrayList(types.length); for (PsiType psiType : types) { - result.add(JavaType.create(psiType)); + result.add(JavaTypeImpl.create(psiType)); } return result; } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaFieldImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaFieldImpl.java index 170abb7d1c7..bdc2981ca70 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaFieldImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaFieldImpl.java @@ -39,6 +39,6 @@ public class JavaFieldImpl extends JavaMemberImpl implements JavaField { @Override @NotNull public JavaType getType() { - return JavaType.create(getPsi().getType()); + return JavaTypeImpl.create(getPsi().getType()); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaMethodImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaMethodImpl.java index df79ab9403a..340a00ae65d 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaMethodImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaMethodImpl.java @@ -67,7 +67,7 @@ public class JavaMethodImpl extends JavaMemberImpl implements JavaMethod { @Nullable public JavaType getReturnType() { PsiType psiType = getPsi().getReturnType(); - return psiType == null ? null : JavaType.create(psiType); + return psiType == null ? null : JavaTypeImpl.create(psiType); } @Override diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaPrimitiveType.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaPrimitiveType.java index 2214148baa3..9a3e738f127 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaPrimitiveType.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaPrimitiveType.java @@ -19,7 +19,7 @@ package org.jetbrains.jet.lang.resolve.java.structure; import com.intellij.psi.PsiPrimitiveType; import org.jetbrains.annotations.NotNull; -public class JavaPrimitiveType extends JavaType { +public class JavaPrimitiveType extends JavaTypeImpl { public JavaPrimitiveType(@NotNull PsiPrimitiveType psiPrimitiveType) { super(psiPrimitiveType); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaType.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaType.java index 67f43f898d8..d875df77465 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaType.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaType.java @@ -16,69 +16,10 @@ package org.jetbrains.jet.lang.resolve.java.structure; -import com.intellij.psi.*; +import com.intellij.psi.PsiType; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public abstract class JavaType { - private final PsiType psiType; - - public JavaType(@NotNull PsiType psiType) { - this.psiType = psiType; - } +public interface JavaType { @NotNull - public PsiType getPsi() { - return psiType; - } - - @NotNull - public static JavaType create(@NotNull PsiType psiType) { - return psiType.accept(new PsiTypeVisitor() { - @Nullable - @Override - public JavaType visitType(PsiType type) { - throw new UnsupportedOperationException("Unsupported PsiType: " + type); - } - - @Nullable - @Override - public JavaType visitPrimitiveType(PsiPrimitiveType primitiveType) { - return new JavaPrimitiveType(primitiveType); - } - - @Nullable - @Override - public JavaType visitArrayType(PsiArrayType arrayType) { - return new JavaArrayType(arrayType); - } - - @Nullable - @Override - public JavaType visitClassType(PsiClassType classType) { - return new JavaClassifierType(classType); - } - - @Nullable - @Override - public JavaType visitWildcardType(PsiWildcardType wildcardType) { - return new JavaWildcardType(wildcardType); - } - }); - } - - @Override - public int hashCode() { - return getPsi().hashCode(); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof JavaType && getPsi().equals(((JavaType) obj).getPsi()); - } - - @Override - public String toString() { - return getClass().getSimpleName() + ": " + getPsi(); - } + PsiType getPsi(); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeImpl.java new file mode 100644 index 00000000000..0bd334ca693 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeImpl.java @@ -0,0 +1,85 @@ +/* + * Copyright 2010-2013 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.structure; + +import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public abstract class JavaTypeImpl implements JavaType { + private final PsiType psiType; + + public JavaTypeImpl(@NotNull PsiType psiType) { + this.psiType = psiType; + } + + @Override + @NotNull + public PsiType getPsi() { + return psiType; + } + + @NotNull + public static JavaType create(@NotNull PsiType psiType) { + return psiType.accept(new PsiTypeVisitor() { + @Nullable + @Override + public JavaType visitType(PsiType type) { + throw new UnsupportedOperationException("Unsupported PsiType: " + type); + } + + @Nullable + @Override + public JavaType visitPrimitiveType(PsiPrimitiveType primitiveType) { + return new JavaPrimitiveType(primitiveType); + } + + @Nullable + @Override + public JavaType visitArrayType(PsiArrayType arrayType) { + return new JavaArrayType(arrayType); + } + + @Nullable + @Override + public JavaType visitClassType(PsiClassType classType) { + return new JavaClassifierType(classType); + } + + @Nullable + @Override + public JavaType visitWildcardType(PsiWildcardType wildcardType) { + return new JavaWildcardType(wildcardType); + } + }); + } + + @Override + public int hashCode() { + return getPsi().hashCode(); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof JavaTypeImpl && getPsi().equals(((JavaType) obj).getPsi()); + } + + @Override + public String toString() { + return getClass().getSimpleName() + ": " + getPsi(); + } +} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeProvider.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeProvider.java index 38262731613..456cc2f0e22 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeProvider.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeProvider.java @@ -30,6 +30,6 @@ public class JavaTypeProvider { @NotNull public JavaType createJavaLangObjectType() { - return JavaType.create(PsiType.getJavaLangObject(manager, GlobalSearchScope.allScope(manager.getProject()))); + return JavaTypeImpl.create(PsiType.getJavaLangObject(manager, GlobalSearchScope.allScope(manager.getProject()))); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeSubstitutor.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeSubstitutor.java index 0aa5657bfc6..22b34f6ed32 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeSubstitutor.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeSubstitutor.java @@ -59,13 +59,13 @@ public class JavaTypeSubstitutor { @NotNull public JavaType substitute(@NotNull JavaType type) { - return JavaType.create(getPsi().substitute(type.getPsi())); + return JavaTypeImpl.create(getPsi().substitute(type.getPsi())); } @Nullable public JavaType substitute(@NotNull JavaTypeParameter typeParameter) { PsiType psiType = getPsi().substitute(typeParameter.getPsi()); - return psiType == null ? null : JavaType.create(psiType); + return psiType == null ? null : JavaTypeImpl.create(psiType); } @NotNull @@ -75,7 +75,7 @@ public class JavaTypeSubstitutor { substitutionMap = new HashMap(); for (Map.Entry entry : psiMap.entrySet()) { PsiType value = entry.getValue(); - substitutionMap.put(new JavaTypeParameter(entry.getKey()), value == null ? null : JavaType.create(value)); + substitutionMap.put(new JavaTypeParameter(entry.getKey()), value == null ? null : JavaTypeImpl.create(value)); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaValueParameter.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaValueParameter.java index 756bfb43326..702da0201df 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaValueParameter.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaValueParameter.java @@ -55,7 +55,7 @@ public class JavaValueParameter extends JavaElementImpl implements JavaAnnotatio @NotNull public JavaType getType() { - return JavaType.create(getPsi().getType()); + return JavaTypeImpl.create(getPsi().getType()); } public boolean isVararg() { diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaWildcardType.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaWildcardType.java index 7b2d841993a..c43ad485690 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaWildcardType.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaWildcardType.java @@ -21,7 +21,7 @@ import com.intellij.psi.PsiWildcardType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class JavaWildcardType extends JavaType { +public class JavaWildcardType extends JavaTypeImpl { public JavaWildcardType(@NotNull PsiWildcardType psiWildcardType) { super(psiWildcardType); } @@ -35,7 +35,7 @@ public class JavaWildcardType extends JavaType { @Nullable public JavaType getBound() { PsiType bound = getPsi().getBound(); - return bound == null ? null : JavaType.create(bound); + return bound == null ? null : JavaTypeImpl.create(bound); } public boolean isExtends() {