Skip to content

Commit de05b29

Browse files
committed
Fix initial source folder field in wizards
1 parent 5960958 commit de05b29

File tree

2 files changed

+64
-109
lines changed

2 files changed

+64
-109
lines changed

kotlin-eclipse-ui/src/org/jetbrains/kotlin/wizards/NewUnitWizardPage.java

Lines changed: 8 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright 2000-2014 JetBrains s.r.o.
2+
* Copyright 2000-2016 JetBrains s.r.o.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -26,10 +26,6 @@
2626
import static org.jetbrains.kotlin.wizards.SWTWizardUtils.createText;
2727

2828
import org.eclipse.core.resources.IProject;
29-
import org.eclipse.core.resources.IResource;
30-
import org.eclipse.core.runtime.IPath;
31-
import org.eclipse.jdt.core.IClasspathEntry;
32-
import org.eclipse.jdt.core.IJavaElement;
3329
import org.eclipse.jdt.core.IJavaProject;
3430
import org.eclipse.jdt.core.IPackageFragment;
3531
import org.eclipse.jdt.core.IPackageFragmentRoot;
@@ -134,12 +130,12 @@ public void modifyText(ModifyEvent e) {
134130
return name;
135131
}
136132

137-
private void setSourceDirByFolderName(String folderName) {
133+
private void setSourceDirByFolderName(String srcFolder) {
138134
try {
139135
sourceDir = null;
140136
for (IJavaProject jp : JavaCore.create(getWorkspaceRoot()).getJavaProjects()) {
141137
for (IPackageFragmentRoot pfr : jp.getPackageFragmentRoots()) {
142-
if (pfr.getPath().toPortableString().equals(folderName)) {
138+
if (pfr.getPath().toPortableString().equals(srcFolder)) {
143139
sourceDir = pfr;
144140
return;
145141
}
@@ -153,8 +149,9 @@ private void setSourceDirByFolderName(String folderName) {
153149
private Text createSourceFolderField(Composite parent) {
154150
createLabel(parent, SOURCE_FOLDER_LABEL_TITLE);
155151

156-
String sourceFolderFromSelection = getSourceFolderFromSelection();
157-
setSourceDirByFolderName(sourceFolderFromSelection);
152+
IPackageFragmentRoot srcFolder = WizardUtilsKt.getSourceFolderBySelection(selection);
153+
String sourceFolderFromSelection = srcFolder != null ? srcFolder.getPath().toOSString() : DEFAULT_SOURCE_FOLDER;
154+
sourceDir = srcFolder;
158155

159156
final Text folder = createText(parent, sourceFolderFromSelection);
160157
folder.addModifyListener(new ModifyListener() {
@@ -186,7 +183,8 @@ public void widgetSelected(SelectionEvent e) {
186183
private Text createPackageField(Composite parent) {
187184
createLabel(parent, PACKAGE_LABEL_TITLE);
188185

189-
String packageFromSelection = getPackageFromSelection();
186+
IPackageFragment fragment = WizardUtilsKt.getPackageBySelection(selection);
187+
String packageFromSelection = fragment != null ? fragment.getElementName() : DEFAULT_PACKAGE;
190188
packageName = packageFromSelection;
191189

192190
final Text pkg = createText(parent, packageFromSelection);
@@ -232,105 +230,6 @@ public void widgetSelected(SelectionEvent e) {
232230
return pkg;
233231
}
234232

235-
private String getSourceFolderFromSelection() {
236-
String defaultFolder = DEFAULT_SOURCE_FOLDER;
237-
238-
if (selection.isEmpty()) {
239-
return defaultFolder;
240-
}
241-
242-
Object selectedObject = selection.getFirstElement();
243-
244-
if (selectedObject instanceof IJavaElement) {
245-
IJavaElement selectedJavaElement = (IJavaElement) selectedObject;
246-
switch (selectedJavaElement.getElementType()) {
247-
case IJavaElement.JAVA_PROJECT:
248-
return getDefaultSrcByProject((IJavaProject) selectedJavaElement);
249-
250-
case IJavaElement.PACKAGE_FRAGMENT_ROOT:
251-
return selectedJavaElement.getPath().toPortableString();
252-
253-
case IJavaElement.PACKAGE_FRAGMENT:
254-
case IJavaElement.COMPILATION_UNIT:
255-
return selectedJavaElement.getPath().uptoSegment(2).toPortableString();
256-
}
257-
} else if (selectedObject instanceof IResource) {
258-
IResource selectedResource = (IResource) selectedObject;
259-
switch (selectedResource.getType()) {
260-
case IResource.FOLDER:
261-
return getDefaultSrcByProject(JavaCore.create(selectedResource.getProject()));
262-
263-
case IResource.FILE:
264-
return selectedResource.getFullPath().uptoSegment(2).toPortableString();
265-
}
266-
}
267-
268-
return defaultFolder;
269-
}
270-
271-
private String getPackageFromSelection() {
272-
String defaultPackage = DEFAULT_PACKAGE;
273-
274-
if (selection.isEmpty()) {
275-
return defaultPackage;
276-
}
277-
278-
Object selectedObject = selection.getFirstElement();
279-
280-
if (selectedObject instanceof IJavaElement) {
281-
IJavaElement selectedJavaElement = (IJavaElement) selectedObject;
282-
switch (selectedJavaElement.getElementType()) {
283-
case IJavaElement.PACKAGE_FRAGMENT:
284-
return selectedJavaElement.getElementName();
285-
286-
case IJavaElement.COMPILATION_UNIT:
287-
try {
288-
return selectedJavaElement.getJavaProject().findPackageFragment(
289-
selectedJavaElement.getPath().makeAbsolute().removeLastSegments(1)).getElementName();
290-
} catch (Exception e) {
291-
KotlinLogger.logAndThrow(e);
292-
}
293-
break;
294-
}
295-
} else if (selectedObject instanceof IResource) {
296-
IResource selectedResource = (IResource) selectedObject;
297-
switch (selectedResource.getType()) {
298-
case IResource.FILE:
299-
try {
300-
return JavaCore.create(selectedResource.getProject()).findPackageFragment(
301-
selectedResource.getFullPath().makeAbsolute().removeLastSegments(1)).getElementName();
302-
} catch (Exception e) {
303-
KotlinLogger.logAndThrow(e);
304-
}
305-
break;
306-
}
307-
}
308-
309-
return defaultPackage;
310-
}
311-
312-
private String getDefaultSrcByProject(IJavaProject javaProject) {
313-
String destFolder = javaProject.getPath().toPortableString();
314-
315-
IClasspathEntry[] classpathEntries = null;
316-
try {
317-
classpathEntries = javaProject.getRawClasspath();
318-
} catch (JavaModelException e) {
319-
KotlinLogger.logAndThrow(e);
320-
321-
return destFolder;
322-
}
323-
324-
for (IClasspathEntry classpathEntry : classpathEntries) {
325-
if (classpathEntry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
326-
destFolder += IPath.SEPARATOR + classpathEntry.getPath().segment(1);
327-
break;
328-
}
329-
}
330-
331-
return destFolder;
332-
}
333-
334233
@Override
335234
protected String createErrorMessage() {
336235
if (sourceDir != null && packageNameIsLegal()) {
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*******************************************************************************
2+
* Copyright 2000-2016 JetBrains s.r.o.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*******************************************************************************/
17+
package org.jetbrains.kotlin.wizards
18+
19+
import org.eclipse.jface.viewers.IStructuredSelection
20+
import org.jetbrains.kotlin.core.utils.sourceFolders
21+
import org.eclipse.jdt.core.IJavaProject
22+
import org.eclipse.jdt.core.IPackageFragmentRoot
23+
import org.eclipse.jdt.core.IPackageFragment
24+
import org.eclipse.jdt.core.ICompilationUnit
25+
import org.eclipse.core.resources.IFile
26+
import org.eclipse.jdt.core.JavaCore
27+
import org.eclipse.core.resources.IResource
28+
29+
fun getSourceFolderBySelection(selection: IStructuredSelection): IPackageFragmentRoot? {
30+
if (selection.isEmpty) return null
31+
32+
val element = selection.firstElement
33+
return when (element) {
34+
is IPackageFragmentRoot -> element
35+
is IJavaProject -> element.sourceFolders.firstOrNull()
36+
is IPackageFragment -> element.parent as IPackageFragmentRoot
37+
is ICompilationUnit -> element.parent.parent as IPackageFragmentRoot
38+
is IResource -> getPackageBySelection(selection)?.parent as? IPackageFragmentRoot
39+
else -> null
40+
}
41+
}
42+
43+
fun getPackageBySelection(selection: IStructuredSelection): IPackageFragment? {
44+
if (selection.isEmpty) return null
45+
46+
val element = selection.firstElement
47+
return when (element) {
48+
is IPackageFragment -> element
49+
is ICompilationUnit -> element.parent as IPackageFragment
50+
is IResource -> {
51+
val javaProject = JavaCore.create(element.project)
52+
javaProject.findPackageFragment(element.getFullPath().removeLastSegments(1))
53+
}
54+
else -> null
55+
}
56+
}

0 commit comments

Comments
 (0)