diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifierImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifierImpl.java index 415b1ae9501..fbbb7404406 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifierImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifierImpl.java @@ -34,7 +34,7 @@ public abstract class JavaClassifierImpl extends JavaElementImpl implements Java @NotNull /* package */ static JavaClassifier create(@NotNull PsiClass psiClass) { if (psiClass instanceof PsiTypeParameter) { - return new JavaTypeParameter((PsiTypeParameter) psiClass); + return new JavaTypeParameterImpl((PsiTypeParameter) psiClass); } else { return new JavaClass(psiClass); 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 4ac5bb53156..31a6f3f8b76 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 @@ -84,7 +84,7 @@ public class JavaElementCollectionFromPsiArrayUtil { if (typeParameters.length == 0) return Collections.emptyList(); List result = new ArrayList(typeParameters.length); for (PsiTypeParameter psiTypeParameter : typeParameters) { - result.add(new JavaTypeParameter(psiTypeParameter)); + result.add(new JavaTypeParameterImpl(psiTypeParameter)); } return result; } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameter.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameter.java index 9cb82312069..f0a5fa4d0d8 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameter.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameter.java @@ -16,63 +16,25 @@ package org.jetbrains.jet.lang.resolve.java.structure; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiTypeParameter; -import com.intellij.psi.PsiTypeParameterListOwner; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.resolve.name.Name; import java.util.Collection; -import static org.jetbrains.jet.lang.resolve.java.structure.JavaElementCollectionFromPsiArrayUtil.classifierTypes; - -public class JavaTypeParameter extends JavaClassifierImpl implements JavaNamedElement { - public JavaTypeParameter(@NotNull PsiTypeParameter psiTypeParameter) { - super(psiTypeParameter); - } - +public interface JavaTypeParameter extends JavaClassifier, JavaNamedElement { @NotNull @Override - public PsiTypeParameter getPsi() { - return (PsiTypeParameter) super.getPsi(); - } + PsiTypeParameter getPsi(); - public int getIndex() { - return getPsi().getIndex(); - } + int getIndex(); @NotNull - @Override - public Name getName() { - return Name.identifier(getPsi().getName()); - } - - @NotNull - public Collection getUpperBounds() { - return classifierTypes(getPsi().getExtendsList().getReferencedTypes()); - } + Collection getUpperBounds(); @Nullable - public JavaTypeParameterListOwner getOwner() { - PsiTypeParameterListOwner owner = getPsi().getOwner(); - // TODO: a separate factory for such things - if (owner instanceof PsiMethod) { - return new JavaMethodImpl((PsiMethod) owner); - } - else if (owner instanceof PsiClass) { - return new JavaClass((PsiClass) owner); - } - else if (owner != null) { - throw new UnsupportedOperationException("Unsupported type parameter list owner: " + owner); - } - - return null; - } + JavaTypeParameterListOwner getOwner(); @NotNull - public JavaTypeProvider getTypeProvider() { - return new JavaTypeProvider(getPsi().getManager()); - } + JavaTypeProvider getTypeProvider(); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameterImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameterImpl.java new file mode 100644 index 00000000000..a8bff6858b0 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameterImpl.java @@ -0,0 +1,82 @@ +/* + * 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.PsiClass; +import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiTypeParameter; +import com.intellij.psi.PsiTypeParameterListOwner; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.resolve.name.Name; + +import java.util.Collection; + +import static org.jetbrains.jet.lang.resolve.java.structure.JavaElementCollectionFromPsiArrayUtil.classifierTypes; + +public class JavaTypeParameterImpl extends JavaClassifierImpl implements JavaTypeParameter { + public JavaTypeParameterImpl(@NotNull PsiTypeParameter psiTypeParameter) { + super(psiTypeParameter); + } + + @NotNull + @Override + public PsiTypeParameter getPsi() { + return (PsiTypeParameter) super.getPsi(); + } + + @Override + public int getIndex() { + return getPsi().getIndex(); + } + + @NotNull + @Override + public Name getName() { + return Name.identifier(getPsi().getName()); + } + + @Override + @NotNull + public Collection getUpperBounds() { + return classifierTypes(getPsi().getExtendsList().getReferencedTypes()); + } + + @Override + @Nullable + public JavaTypeParameterListOwner getOwner() { + PsiTypeParameterListOwner owner = getPsi().getOwner(); + // TODO: a separate factory for such things + if (owner instanceof PsiMethod) { + return new JavaMethodImpl((PsiMethod) owner); + } + else if (owner instanceof PsiClass) { + return new JavaClass((PsiClass) owner); + } + else if (owner != null) { + throw new UnsupportedOperationException("Unsupported type parameter list owner: " + owner); + } + + return null; + } + + @Override + @NotNull + public JavaTypeProvider getTypeProvider() { + return new JavaTypeProvider(getPsi().getManager()); + } +} 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 22b34f6ed32..a10dfa91ef7 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 @@ -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 : JavaTypeImpl.create(value)); + substitutionMap.put(new JavaTypeParameterImpl(entry.getKey()), value == null ? null : JavaTypeImpl.create(value)); } }