Create abstract JavaElementFactory

Needed to wrap the logic of creation of elements/types, right now only array
types
This commit is contained in:
Alexander Udalov
2013-08-19 17:44:41 +04:00
parent 9f44a1eb0d
commit 08bf7f8eee
5 changed files with 59 additions and 7 deletions
@@ -176,7 +176,7 @@ public final class DescriptorResolverUtils {
}
else if (type instanceof JavaArrayType) {
JavaType erasure = erasure(((JavaArrayType) type).getComponentType(), substitutor);
return erasure == null ? null : JavaArrayType.create(erasure);
return erasure == null ? null : JavaElementFactory.getInstance().createArrayType(erasure);
}
else if (type instanceof JavaWildcardType) {
JavaWildcardType wildcardType = (JavaWildcardType) type;
@@ -213,7 +213,7 @@ class PropagationHeuristics {
@NotNull
private static JavaType varargToArray(@NotNull JavaType type, boolean isVararg) {
return isVararg ? JavaArrayType.create(((JavaArrayType) type).getComponentType()) : type;
return isVararg ? JavaElementFactory.getInstance().createArrayType(((JavaArrayType) type).getComponentType()) : type;
}
@NotNull
@@ -30,11 +30,6 @@ public class JavaArrayType extends JavaTypeImpl {
return (PsiArrayType) super.getPsi();
}
@NotNull
public static JavaArrayType create(@NotNull JavaType elementType) {
return new JavaArrayType(elementType.getPsi().createArrayType());
}
@NotNull
public JavaType getComponentType() {
return JavaTypeImpl.create(getPsi().getComponentType());
@@ -0,0 +1,30 @@
/*
* 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 org.jetbrains.annotations.NotNull;
public abstract class JavaElementFactory {
@NotNull
public static JavaElementFactory getInstance() {
// TODO: ServiceLoader.load
return new JavaElementFactoryImpl();
}
@NotNull
public abstract JavaArrayType createArrayType(@NotNull JavaType elementType);
}
@@ -0,0 +1,27 @@
/*
* 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 org.jetbrains.annotations.NotNull;
public class JavaElementFactoryImpl extends JavaElementFactory {
@NotNull
@Override
public JavaArrayType createArrayType(@NotNull JavaType elementType) {
return new JavaArrayType(elementType.getPsi().createArrayType());
}
}