X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Feditor%2Fcompletion%2FSCLTextEditorEnvironment.java;h=ffe709f45b768a9ff6c3cd5172b783fd349b5fa9;hb=a1c4624cd37bf8c3ef857b4fc5c89269acf170cc;hp=9006f3cc2bd12d4d2d3dc98d654940dd209533cb;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.java index 9006f3cc2..ffe709f45 100644 --- a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.java +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.java @@ -18,7 +18,9 @@ import org.simantics.scl.compiler.errors.Failable; import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException; import org.simantics.scl.compiler.internal.parsing.parser.SCLParserImpl; import org.simantics.scl.compiler.module.ImportDeclaration; +import org.simantics.scl.compiler.module.InvalidModulePathException; import org.simantics.scl.compiler.module.Module; +import org.simantics.scl.compiler.module.ModuleUtils; import org.simantics.scl.compiler.module.repository.ImportFailureException; import org.simantics.scl.compiler.types.TCon; import org.simantics.scl.osgi.SCLOsgi; @@ -43,12 +45,12 @@ public class SCLTextEditorEnvironment { public void updateEnvironment(IDocument document) { String contents = document.get(); - String[] lines = contents.split("\\R+"); + String[] lines = contents.split("\\R+"); //$NON-NLS-1$ List imports = new ArrayList<>(); - imports.add(new ImportDeclaration("StandardLibrary", "")); + imports.add(new ImportDeclaration("StandardLibrary", "")); //$NON-NLS-1$ //$NON-NLS-2$ for (String line : lines) { line = line.trim(); - if (line.startsWith("import") || line.startsWith("include")) { + if (line.startsWith("import") || line.startsWith("include")) { //$NON-NLS-1$ //$NON-NLS-2$ SCLParserImpl parser = new SCLParserImpl(new StringReader(line)); try { ImportDeclaration importDecl = (ImportDeclaration)parser.parseImport(); @@ -80,14 +82,14 @@ public class SCLTextEditorEnvironment { List proposals = new ArrayList<>(); for(SCLValue value : Environments.findValuesForPrefix(env, prefix)) { Name name = value.getName(); - if((name.module.equals(moduleName) || !value.isPrivate()) && !(name.name.contains("$") && Character.isLetter(name.name.charAt(0)))) + if((name.module.equals(moduleName) || !value.isPrivate()) && !(name.name.contains("$") && Character.isLetter(name.name.charAt(0)))) //$NON-NLS-1$ proposals.add(new SCLCompletionProposal(value, offset - lastPart.length(), lastPart)); } for(TCon type : Environments.findTypesForPrefix(env, prefix)) { proposals.add(new SCLCompletionProposal(type.name, type.module, SCLCompletionType.TYPE, offset - lastPart.length(), lastPart)); } - if(!prefix.contains(".")) { + if(!prefix.contains(".")) { //$NON-NLS-1$ for (ImportDeclaration decl : cachedImports) { if (decl.localName != null && !decl.localName.isEmpty() && decl.localName.toLowerCase().startsWith(prefix.toLowerCase())) { proposals.add(new SCLCompletionProposal(decl.localName, decl.moduleName, SCLCompletionType.CONST, offset - prefix.length(), prefix)); @@ -103,44 +105,19 @@ public class SCLTextEditorEnvironment { private ArrayList processRelativeImports(List relativeImports) { ArrayList absoluteImports = new ArrayList(relativeImports.size()); for(ImportDeclaration relativeImport : relativeImports) { - if(relativeImport.moduleName.startsWith(".")) { - String absoluteModuleName = convertRelativeModulePath(relativeImport.moduleName); - if(absoluteModuleName != null) - absoluteImports.add(new ImportDeclaration( - absoluteModuleName, relativeImport.localName, - relativeImport.reexport, relativeImport.spec)); - } - else - absoluteImports.add(relativeImport); + try { + String absoluteModuleName = ModuleUtils.resolveAbsolutePath(moduleName, relativeImport.moduleName); + absoluteImports.add(new ImportDeclaration( + relativeImport.location, + absoluteModuleName, relativeImport.localName, + relativeImport.reexport, relativeImport.spec)); + } catch (InvalidModulePathException e) { + // Nothing to do + } } return absoluteImports; } - private String convertRelativeModulePath(String relativeModuleName) { - String originalRelativeModuleName = relativeModuleName; - int p = moduleName.lastIndexOf('/'); - String parentPackage = p < 0 ? "" : moduleName.substring(0, p); - while(relativeModuleName.startsWith(".")) { - if(relativeModuleName.startsWith("./")) { - relativeModuleName = relativeModuleName.substring(2); - } - else if(relativeModuleName.startsWith("../")) { - relativeModuleName = relativeModuleName.substring(3); - if(parentPackage.isEmpty()) { - System.err.println("Couldn't resolve the relative module name " + originalRelativeModuleName + " when the current module name is " + moduleName + "."); - return null; - } - p = parentPackage.lastIndexOf('/'); - parentPackage = p < 0 ? "" : parentPackage.substring(0, p); - } - else { - System.err.println("Couldn't resolve the relative module name " + originalRelativeModuleName + ". It has an invalid syntax."); - return null; - } - } - return parentPackage + "/" + relativeModuleName; - } - private static final Comparator COMPARATOR = new Comparator() { @Override