From a661134b350ca0acbc2a87a493edaa7a5c0c835e Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sun, 8 Apr 2012 03:18:35 +0400 Subject: [PATCH] parse property name utility --- .../java/JavaDescriptorResolverHelper.java | 16 ++++--- .../resolve/java/prop/PropertyNameUtils.java | 45 +++++++++++++++++++ .../java/prop/PropertyParseResult.java | 42 +++++++++++++++++ 3 files changed, 97 insertions(+), 6 deletions(-) create mode 100644 compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyNameUtils.java create mode 100644 compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyParseResult.java diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java index f73fe37040e..bcc5ccac945 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java @@ -22,6 +22,8 @@ import com.intellij.psi.PsiMember; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiParameter; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils; +import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult; import java.util.ArrayList; import java.util.HashMap; @@ -114,11 +116,12 @@ class JavaDescriptorResolverHelper { continue; } - // TODO: "is" prefix - // TODO: remove getJavaClass - if (method.getName().startsWith(JvmAbi.GETTER_PREFIX) && method.getName().length() > JvmAbi.GETTER_PREFIX.length()) { + PropertyParseResult propertyParseResult = PropertyNameUtils.parseMethodToProperty(method.getName()); - String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.GETTER_PREFIX.length())); + // TODO: remove getJavaClass + if (propertyParseResult != null && propertyParseResult.isGetter()) { + + String propertyName = propertyParseResult.getPropertyName(); NamedMembers members = getNamedMembers(propertyName); // TODO: some java properties too @@ -156,9 +159,10 @@ class JavaDescriptorResolverHelper { } } - } else if (method.getName().startsWith(JvmAbi.SETTER_PREFIX) && method.getName().length() > JvmAbi.SETTER_PREFIX.length()) { + } + else if (propertyParseResult != null && !propertyParseResult.isGetter()) { - String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.SETTER_PREFIX.length())); + String propertyName = propertyParseResult.getPropertyName(); NamedMembers members = getNamedMembers(propertyName); if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) { diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyNameUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyNameUtils.java new file mode 100644 index 00000000000..0ee0dd0e2a3 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyNameUtils.java @@ -0,0 +1,45 @@ +/* + * 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.prop; + +import com.intellij.openapi.util.text.StringUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.resolve.java.JvmAbi; + +/** + * @author Stepan Koltsov + */ +public class PropertyNameUtils { + + @Nullable + public static PropertyParseResult parseMethodToProperty(@NotNull String methodName) { + // TODO: support is properties + if (methodName.startsWith(JvmAbi.GETTER_PREFIX) && methodName.length() > JvmAbi.GETTER_PREFIX.length()) { + String propertyName = StringUtil.decapitalize(methodName.substring(JvmAbi.GETTER_PREFIX.length())); + return new PropertyParseResult(propertyName, true); + } + else if (methodName.startsWith(JvmAbi.SETTER_PREFIX) && methodName.length() > JvmAbi.SETTER_PREFIX.length()) { + String propertyName = StringUtil.decapitalize(methodName.substring(JvmAbi.SETTER_PREFIX.length())); + return new PropertyParseResult(propertyName, false); + } + else { + return null; + } + } + +} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyParseResult.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyParseResult.java new file mode 100644 index 00000000000..5a4998b3161 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/prop/PropertyParseResult.java @@ -0,0 +1,42 @@ +/* + * 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.prop; + +import org.jetbrains.annotations.NotNull; + +/** + * @author Stepan Koltsov + */ +public class PropertyParseResult { + @NotNull + private final String propertyName; + private final boolean getter; + + public PropertyParseResult(@NotNull String propertyName, boolean getter) { + this.propertyName = propertyName; + this.getter = getter; + } + + @NotNull + public String getPropertyName() { + return propertyName; + } + + public boolean isGetter() { + return getter; + } +}