Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
6d1bfce9
K
kotlin
项目概览
硅谷海盗
/
kotlin
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kotlin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6d1bfce9
编写于
5月 03, 2012
作者:
E
Evgeny Gerashchenko
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implemented compacting type names and adding valid imports in specify type explicitly intention.
上级
3053ac78
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
104 addition
and
71 deletion
+104
-71
idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java
...t/plugin/codeInsight/OverrideImplementMethodsHandler.java
+1
-67
idea/src/org/jetbrains/jet/plugin/codeInsight/ReferenceToClassesShortening.java
.../jet/plugin/codeInsight/ReferenceToClassesShortening.java
+98
-0
idea/src/org/jetbrains/jet/plugin/refactoring/introduceVariable/JetChangePropertyActions.java
...factoring/introduceVariable/JetChangePropertyActions.java
+5
-4
未找到文件。
idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java
浏览文件 @
6d1bfce9
...
...
@@ -33,13 +33,10 @@ import org.jetbrains.annotations.Nullable;
import
org.jetbrains.jet.lang.descriptors.*
;
import
org.jetbrains.jet.lang.psi.*
;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
org.jetbrains.jet.lang.resolve.DescriptorUtils
;
import
org.jetbrains.jet.lang.resolve.scopes.JetScope
;
import
org.jetbrains.jet.lang.types.JetType
;
import
org.jetbrains.jet.lang.types.lang.JetStandardClasses
;
import
org.jetbrains.jet.lang.types.lang.JetStandardLibrary
;
import
org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade
;
import
org.jetbrains.jet.plugin.quickfix.ImportInsertHelper
;
import
org.jetbrains.jet.resolve.DescriptorRenderer
;
import
java.util.*
;
...
...
@@ -90,70 +87,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
afterAnchor
=
added
;
elementsToCompact
.
add
((
JetElement
)
added
);
}
compactReferenceToClasses
(
elementsToCompact
);
}
private
static
void
compactReferenceToClasses
(
List
<
JetElement
>
elementsToCompact
)
{
if
(
elementsToCompact
.
isEmpty
())
{
return
;
}
final
JetFile
file
=
(
JetFile
)
elementsToCompact
.
get
(
0
).
getContainingFile
();
final
BindingContext
bc
=
WholeProjectAnalyzerFacade
.
analyzeProjectWithCacheOnAFile
(
file
).
getBindingContext
();
for
(
JetElement
element
:
elementsToCompact
)
{
element
.
accept
(
new
JetVisitorVoid
()
{
@Override
public
void
visitJetElement
(
JetElement
element
)
{
element
.
acceptChildren
(
this
);
}
@Override
public
void
visitTypeReference
(
JetTypeReference
typeReference
)
{
super
.
visitTypeReference
(
typeReference
);
JetTypeElement
typeElement
=
typeReference
.
getTypeElement
();
if
(
typeElement
instanceof
JetNullableType
)
{
typeElement
=
((
JetNullableType
)
typeElement
).
getInnerType
();
}
if
(
typeElement
instanceof
JetUserType
)
{
JetUserType
userType
=
(
JetUserType
)
typeElement
;
DeclarationDescriptor
target
=
bc
.
get
(
BindingContext
.
REFERENCE_TARGET
,
userType
.
getReferenceExpression
());
if
(
target
instanceof
ClassDescriptor
)
{
ClassDescriptor
targetClass
=
(
ClassDescriptor
)
target
;
ClassDescriptor
targetTopLevelClass
=
ImportInsertHelper
.
getTopLevelClass
(
targetClass
);
JetScope
scope
=
bc
.
get
(
BindingContext
.
TYPE_RESOLUTION_SCOPE
,
typeReference
);
ClassifierDescriptor
classifier
=
scope
.
getClassifier
(
targetTopLevelClass
.
getName
());
if
(
targetTopLevelClass
==
classifier
)
{
compactReferenceToClass
(
userType
,
targetClass
);
}
else
if
(
classifier
==
null
)
{
ImportInsertHelper
.
addImportDirective
(
DescriptorUtils
.
getFQName
(
targetTopLevelClass
).
toSafe
(),
file
);
compactReferenceToClass
(
userType
,
targetClass
);
}
else
{
// leave FQ name
}
}
}
}
private
void
compactReferenceToClass
(
JetUserType
userType
,
ClassDescriptor
targetClass
)
{
if
(
targetClass
==
JetStandardClasses
.
getUnitType
().
getConstructor
().
getDeclarationDescriptor
())
{
// do not replace "Unit" with "Tuple0"
return
;
}
String
name
=
targetClass
.
getName
();
DeclarationDescriptor
parent
=
targetClass
.
getContainingDeclaration
();
while
(
parent
instanceof
ClassDescriptor
)
{
name
=
parent
.
getName
()
+
"."
+
name
;
parent
=
parent
.
getContainingDeclaration
();
}
JetTypeArgumentList
typeArgumentList
=
userType
.
getTypeArgumentList
();
userType
.
replace
(
JetPsiFactory
.
createType
(
userType
.
getProject
(),
name
+
(
typeArgumentList
==
null
?
""
:
typeArgumentList
.
getText
())));
}
});
}
ReferenceToClassesShortening
.
compactReferenceToClasses
(
elementsToCompact
);
}
...
...
idea/src/org/jetbrains/jet/plugin/codeInsight/ReferenceToClassesShortening.java
0 → 100644
浏览文件 @
6d1bfce9
/*
* 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.plugin.codeInsight
;
import
org.jetbrains.jet.lang.descriptors.ClassDescriptor
;
import
org.jetbrains.jet.lang.descriptors.ClassifierDescriptor
;
import
org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
;
import
org.jetbrains.jet.lang.psi.*
;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
org.jetbrains.jet.lang.resolve.DescriptorUtils
;
import
org.jetbrains.jet.lang.resolve.scopes.JetScope
;
import
org.jetbrains.jet.lang.types.lang.JetStandardClasses
;
import
org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade
;
import
org.jetbrains.jet.plugin.quickfix.ImportInsertHelper
;
import
java.util.List
;
public
class
ReferenceToClassesShortening
{
private
ReferenceToClassesShortening
()
{
}
public
static
void
compactReferenceToClasses
(
List
<?
extends
JetElement
>
elementsToCompact
)
{
if
(
elementsToCompact
.
isEmpty
())
{
return
;
}
final
JetFile
file
=
(
JetFile
)
elementsToCompact
.
get
(
0
).
getContainingFile
();
final
BindingContext
bc
=
WholeProjectAnalyzerFacade
.
analyzeProjectWithCacheOnAFile
(
file
).
getBindingContext
();
for
(
JetElement
element
:
elementsToCompact
)
{
element
.
accept
(
new
JetVisitorVoid
()
{
@Override
public
void
visitJetElement
(
JetElement
element
)
{
element
.
acceptChildren
(
this
);
}
@Override
public
void
visitTypeReference
(
JetTypeReference
typeReference
)
{
super
.
visitTypeReference
(
typeReference
);
JetTypeElement
typeElement
=
typeReference
.
getTypeElement
();
if
(
typeElement
instanceof
JetNullableType
)
{
typeElement
=
((
JetNullableType
)
typeElement
).
getInnerType
();
}
if
(
typeElement
instanceof
JetUserType
)
{
JetUserType
userType
=
(
JetUserType
)
typeElement
;
DeclarationDescriptor
target
=
bc
.
get
(
BindingContext
.
REFERENCE_TARGET
,
userType
.
getReferenceExpression
());
if
(
target
instanceof
ClassDescriptor
)
{
ClassDescriptor
targetClass
=
(
ClassDescriptor
)
target
;
ClassDescriptor
targetTopLevelClass
=
ImportInsertHelper
.
getTopLevelClass
(
targetClass
);
JetScope
scope
=
bc
.
get
(
BindingContext
.
TYPE_RESOLUTION_SCOPE
,
typeReference
);
ClassifierDescriptor
classifier
=
scope
.
getClassifier
(
targetTopLevelClass
.
getName
());
if
(
targetTopLevelClass
==
classifier
)
{
compactReferenceToClass
(
userType
,
targetClass
);
}
else
if
(
classifier
==
null
)
{
ImportInsertHelper
.
addImportDirective
(
DescriptorUtils
.
getFQName
(
targetTopLevelClass
).
toSafe
(),
file
);
compactReferenceToClass
(
userType
,
targetClass
);
}
else
{
// leave FQ name
}
}
}
}
private
void
compactReferenceToClass
(
JetUserType
userType
,
ClassDescriptor
targetClass
)
{
if
(
targetClass
==
JetStandardClasses
.
getUnitType
().
getConstructor
().
getDeclarationDescriptor
())
{
// do not replace "Unit" with "Tuple0"
return
;
}
String
name
=
targetClass
.
getName
();
DeclarationDescriptor
parent
=
targetClass
.
getContainingDeclaration
();
while
(
parent
instanceof
ClassDescriptor
)
{
name
=
parent
.
getName
()
+
"."
+
name
;
parent
=
parent
.
getContainingDeclaration
();
}
JetTypeArgumentList
typeArgumentList
=
userType
.
getTypeArgumentList
();
userType
.
replace
(
JetPsiFactory
.
createType
(
userType
.
getProject
(),
name
+
(
typeArgumentList
==
null
?
""
:
typeArgumentList
.
getText
())));
}
});
}
}
}
idea/src/org/jetbrains/jet/plugin/refactoring/introduceVariable/JetChangePropertyActions.java
浏览文件 @
6d1bfce9
...
...
@@ -5,14 +5,15 @@ import com.intellij.openapi.project.Project;
import
com.intellij.psi.PsiElement
;
import
com.intellij.psi.PsiWhiteSpace
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.jet.lang.psi.JetFile
;
import
org.jetbrains.jet.lang.psi.JetProperty
;
import
org.jetbrains.jet.lang.psi.JetPsiFactory
;
import
org.jetbrains.jet.lang.psi.JetTypeReference
;
import
org.jetbrains.jet.lang.types.JetType
;
import
org.jetbrains.jet.plugin.
quickfix.ImportInsertHelper
;
import
org.jetbrains.jet.plugin.
codeInsight.ReferenceToClassesShortening
;
import
org.jetbrains.jet.resolve.DescriptorRenderer
;
import
java.util.Collections
;
/**
* User: Alefas
* Date: 14.02.12
...
...
@@ -38,15 +39,15 @@ public class JetChangePropertyActions {
if
(
anchor
==
null
)
return
;
anchor
=
anchor
.
getNextSibling
();
if
(
anchor
==
null
||
!(
anchor
instanceof
PsiWhiteSpace
))
return
;
JetTypeReference
typeReference
=
JetPsiFactory
.
createType
(
project
,
DescriptorRenderer
.
TEXT
.
renderType
WithShortNames
(
exprType
));
JetTypeReference
typeReference
=
JetPsiFactory
.
createType
(
project
,
DescriptorRenderer
.
TEXT
.
renderType
(
exprType
));
ASTNode
colon
=
JetPsiFactory
.
createColonNode
(
project
);
ASTNode
anchorNode
=
anchor
.
getNode
().
getTreeNext
();
property
.
getNode
().
addChild
(
colon
,
anchorNode
);
property
.
getNode
().
addChild
(
JetPsiFactory
.
createWhiteSpace
(
project
).
getNode
(),
anchorNode
);
property
.
getNode
().
addChild
(
typeReference
.
getNode
(),
anchorNode
);
property
.
getNode
().
addChild
(
JetPsiFactory
.
createWhiteSpace
(
project
).
getNode
(),
anchorNode
);
ImportInsertHelper
.
addImportDirectivesIfNeeded
(
exprType
,
(
JetFile
)
property
.
getContainingFile
());
anchor
.
delete
();
ReferenceToClassesShortening
.
compactReferenceToClasses
(
Collections
.
singletonList
(
property
));
}
public
static
void
removeTypeAnnotation
(
Project
project
,
JetProperty
property
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录