Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,11 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
org.eclipse.jdt.core.formatter.align_with_spaces=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
Expand All @@ -115,6 +118,7 @@ org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_e
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
Expand Down Expand Up @@ -158,6 +162,8 @@ org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=false
org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
Expand Down Expand Up @@ -382,6 +388,9 @@ org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=160
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
Expand All @@ -399,10 +408,10 @@ org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common
org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.char=space
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ cleanup_profile=org.eclipse.jdt.ui.default.eclipse_clean_up_profile
cleanup_settings_version=2
eclipse.preferences.version=1
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
formatter_profile=_JDTLS.EXT
formatter_settings_version=13
formatter_profile=_Java Dependency
formatter_settings_version=14
org.eclipse.jdt.ui.javadoc=true
org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*******************************************************************************\n * Copyright (c) ${year} Red Hat Inc. and others.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors\:\n * Red Hat Inc. - initial API and implementation\n *******************************************************************************/</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\n * ${see_to_overridden}\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
sp_cleanup.add_default_serial_version_id=true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,15 @@
import java.util.function.BiFunction;
import java.util.stream.Collectors;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
Expand Down Expand Up @@ -72,7 +76,7 @@ public class PackageCommand {
commands.put(NodeKind.CONTAINER, PackageCommand::getPackageFragmentRoots);
commands.put(NodeKind.PACKAGEROOT, PackageCommand::getPackages);
commands.put(NodeKind.PACKAGE, PackageCommand::getRootTypes);
commands.put(NodeKind.Folder, PackageCommand::getFolderChildren);
commands.put(NodeKind.FOLDER, PackageCommand::getFolderChildren);
}

/**
Expand Down Expand Up @@ -228,7 +232,7 @@ private static List<PackageNode> getPackages(PackageParams query, IProgressMonit
new Status(IStatus.ERROR, JdtlsExtActivator.PLUGIN_ID, String.format("No package root found for %s", query.getPath())));
}
Object[] result = getPackageFragmentRootContent(packageRoot, pm);
return convertToPackageNode(result);
return convertToPackageNode(result, packageRoot);
} catch (CoreException e) {
JdtlsExtActivator.logException("Problem load project package ", e);
}
Expand All @@ -248,7 +252,8 @@ private static List<PackageNode> getRootTypes(PackageParams query, IProgressMoni
IPackageFragment packageFragment = packageRoot.getPackageFragment(DEFAULT_PACKAGE_DISPLAYNAME.equals(query.getPath()) ? "" : query.getPath());
if (packageFragment != null) {
IJavaElement[] types = packageFragment.getChildren();
return Arrays.stream(types).filter(typeRoot -> !typeRoot.getElementName().contains("$")).map(typeRoot -> {
Object[] nonJavaResources = packageFragment.getNonJavaResources();
List<PackageNode> rootTypeNodes = Arrays.stream(types).filter(typeRoot -> !typeRoot.getElementName().contains("$")).map(typeRoot -> {
PackageNode item = new TypeRootNode(typeRoot.getElementName(), typeRoot.getPath().toPortableString(), NodeKind.TYPEROOT,
typeRoot instanceof IClassFile ? TypeRootNode.K_BINARY : TypeRootNode.K_SOURCE);
if (typeRoot instanceof ICompilationUnit) {
Expand All @@ -258,7 +263,17 @@ private static List<PackageNode> getRootTypes(PackageParams query, IProgressMoni
}
return item;
}).collect(Collectors.toList());

if (nonJavaResources.length == 0) {
return rootTypeNodes;
}
// when .java files and other .properties files are mixed up
rootTypeNodes.addAll(Arrays.stream(nonJavaResources).filter(resource -> resource instanceof IFile).map(resource -> {
IFile file = (IFile) resource;
PackageNode item = new PackageNode(file.getName(), file.getFullPath().toPortableString(), NodeKind.FILE);
item.setUri(JDTUtils.getFileURI(file));
return item;
}).collect(Collectors.toList()));
return rootTypeNodes;
}
} catch (CoreException e) {
JdtlsExtActivator.logException("Problem load project classfile list ", e);
Expand All @@ -276,17 +291,27 @@ private static List<PackageNode> getFolderChildren(PackageParams query, IProgres
throw new CoreException(
new Status(IStatus.ERROR, JdtlsExtActivator.PLUGIN_ID, String.format("No package root found for %s", query.getPath())));
}
// jar file and folders
Object[] resources = packageRoot.getNonJavaResources();
for (Object resource : resources) {
if (pm.isCanceled()) {
throw new OperationCanceledException();
if (packageRoot.getKind() == IPackageFragmentRoot.K_BINARY) {
Object[] resources = packageRoot.getNonJavaResources();
for (Object resource : resources) {
if (pm.isCanceled()) {
throw new OperationCanceledException();
}
if (resource instanceof JarEntryDirectory) {
JarEntryDirectory directory = (JarEntryDirectory) resource;
Object[] children = findJarDirectoryChildren(directory, query.getPath());
if (children != null) {
return convertToPackageNode(children, null);
}
}
}
if (resource instanceof JarEntryDirectory) {
JarEntryDirectory directory = (JarEntryDirectory) resource;
Object[] children = findJarDirectoryChildren(directory, query.getPath());
} else {
IFolder folder = javaProject.getProject().getFolder(new Path(query.getPath()).makeRelativeTo(javaProject.getProject().getFullPath()));
if (folder != null && folder.exists()) {
Object[] children = JavaCore.create(folder) != null ? Arrays.stream(folder.members()).filter(t -> t instanceof IFile).toArray()
: folder.members();
if (children != null) {
return convertToPackageNode(children);
return convertToPackageNode(children, null);
}
}
}
Expand All @@ -304,14 +329,16 @@ private static Object[] getPackageFragmentRootContent(IPackageFragmentRoot root,
IPackageFragment fragment = (IPackageFragment) child;
if (fragment.hasChildren()) {
result.add(child);
} else if (fragment.getNonJavaResources().length > 0) { // some package has non-java files
result.add(fragment.getResource());
}
}
Object[] nonJavaResources = root.getNonJavaResources();
Collections.addAll(result, nonJavaResources);
return result.toArray();
}

private static List<PackageNode> convertToPackageNode(Object[] rootContent) throws JavaModelException {
private static List<PackageNode> convertToPackageNode(Object[] rootContent, IPackageFragmentRoot packageRoot) throws JavaModelException {
List<PackageNode> result = new ArrayList<>();
for (Object root : rootContent) {
if (root instanceof IPackageFragment) {
Expand All @@ -329,6 +356,24 @@ private static List<PackageNode> convertToPackageNode(Object[] rootContent) thro
if (jarNode != null) {
result.add(jarNode);
}
} else if (root instanceof IFile) {
IFile file = (IFile) root;
PackageNode entry = new PackageNode(file.getName(), file.getFullPath().toPortableString(), NodeKind.FILE);
entry.setUri(JDTUtils.getFileURI(file));
result.add(entry);
} else if (root instanceof IFolder) {
IFolder folder = (IFolder) root;
String displayName = folder.getName();
if (packageRoot != null) {
// together with package list, we need to provide full folder name relative to
// package root
IPath path = folder.getFullPath().makeRelativeTo(packageRoot.getPath());
displayName = StringUtils.replace(path.toPortableString(), "/", ".");
}

PackageNode entry = new PackageNode(displayName, folder.getFullPath().toPortableString(), NodeKind.FOLDER);
entry.setUri(JDTUtils.getFileURI(folder));
result.add(entry);
}
}

Expand All @@ -337,7 +382,7 @@ private static List<PackageNode> convertToPackageNode(Object[] rootContent) thro

private static PackageNode getJarEntryResource(JarEntryResource resource) {
if (resource instanceof JarEntryDirectory) {
return new PackageNode(resource.getName(), resource.getFullPath().toPortableString(), NodeKind.Folder);
return new PackageNode(resource.getName(), resource.getFullPath().toPortableString(), NodeKind.FOLDER);
} else if (resource instanceof JarEntryFile) {
PackageNode entry = new PackageNode(resource.getName(), resource.getFullPath().toPortableString(), NodeKind.FILE);
entry.setUri(ExtUtils.toUri((JarEntryFile) resource));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public enum NodeKind {

TYPEROOT(6),

Folder(7),
FOLDER(7),

FILE(8);

Expand Down
4 changes: 2 additions & 2 deletions src/views/dependencyExplorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export class DependencyExplorer {
this._dependencyViewer = window.createTreeView("javaDependencyExplorer", { treeDataProvider: this._dataProvider });

window.onDidChangeActiveTextEditor((textEditor: TextEditor) => {
if (textEditor && textEditor.document && textEditor.document.languageId === "java" && Settings.syncWithFolderExplorer()) {
if (textEditor && textEditor.document && Settings.syncWithFolderExplorer()) {
this.reveal(textEditor.document.uri);
}
});
Expand Down Expand Up @@ -63,7 +63,7 @@ export class DependencyExplorer {
private visitChildren(children: DataNode[], paths: INodeData[]): void {
if (children && paths) {
for (const c of children) {
if (c.path === paths[0].path) {
if (paths[0] && c.path === paths[0].path && c.nodeData.name === paths[0].name) {
if (paths.length === 1) {
if (this._dependencyViewer.visible) {
this._dependencyViewer.reveal(c);
Expand Down
Loading