additional steps to make xml config analysis configurable, not yet complete through
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2017 Pivotal, Inc.
|
||||
* Copyright (c) 2017, 2019 Pivotal, Inc.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
@@ -24,6 +24,7 @@ public class LanguageId {
|
||||
public static final LanguageId CF_MANIFEST = of("manifest-yaml");
|
||||
public static final LanguageId JAVA = of("java");
|
||||
public static final LanguageId YAML = of("yaml");
|
||||
public static final LanguageId XML = of("xml");
|
||||
|
||||
public static final LanguageId BOSH_DEPLOYMENT = of("bosh-deployment-manifest");
|
||||
public static final LanguageId BOSH_CLOUD_CONFIG = of("bosh-cloud-config");
|
||||
|
||||
@@ -91,7 +91,7 @@ import com.google.common.collect.ImmutableSet;
|
||||
*/
|
||||
public class BootJavaLanguageServerComponents implements LanguageServerComponents {
|
||||
|
||||
private static final Set<LanguageId> LANGUAGES = ImmutableSet.of(LanguageId.JAVA);
|
||||
private static final Set<LanguageId> LANGUAGES = ImmutableSet.of(LanguageId.JAVA, LanguageId.XML);
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(BootJavaLanguageServerComponents.class);
|
||||
|
||||
@@ -208,6 +208,9 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
|
||||
liveHoverWatchdog.disableHighlights();
|
||||
}
|
||||
|
||||
indexer.configureIndexer(config.isSpringXMLSupportEnabled());
|
||||
|
||||
|
||||
// live change detection watchdog
|
||||
if (config.isChangeDetectionEnabled()) {
|
||||
liveChangeDetectionWatchdog.enableHighlights();
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.java.utils;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
@@ -69,6 +70,7 @@ public class SpringIndexerXML implements SpringIndexer {
|
||||
|
||||
@Override
|
||||
public void updateFile(IJavaProject project, String docURI, String content) throws Exception {
|
||||
scanFile(project, new ByteArrayInputStream(content.getBytes()), docURI);
|
||||
}
|
||||
|
||||
private void scanProject(IJavaProject project, String[] files) {
|
||||
@@ -78,50 +80,51 @@ public class SpringIndexerXML implements SpringIndexer {
|
||||
}
|
||||
|
||||
private void scanFile(IJavaProject project, String file) {
|
||||
|
||||
System.out.println("XML parsing for: " + file);
|
||||
|
||||
try {
|
||||
InputStream xmlInputStream = new FileInputStream(file);
|
||||
String docURI = UriUtil.toUri(new File(file)).toString();
|
||||
|
||||
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
XMLEventReader eventReader = inputFactory.createXMLEventReader(xmlInputStream);
|
||||
|
||||
while (eventReader.hasNext()) {
|
||||
XMLEvent event = eventReader.nextEvent();
|
||||
switch (event.getEventType()) {
|
||||
|
||||
case XMLEvent.START_ELEMENT:
|
||||
StartElement startElement = event.asStartElement();
|
||||
|
||||
String namespaceURI = startElement.getName().getNamespaceURI();
|
||||
if (namespaceURI != null && this.namespaceHandler.containsKey(namespaceURI)) {
|
||||
SpringIndexerXMLNamespaceHandler namespaceHandler = this.namespaceHandler.get(namespaceURI);
|
||||
|
||||
String docURI = UriUtil.toUri(new File(file)).toString();
|
||||
namespaceHandler.processStartElement(project, docURI, startElement, this.handler);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case XMLEvent.CHARACTERS:
|
||||
Characters characters = event.asCharacters();
|
||||
System.out.print(characters.getData());
|
||||
break;
|
||||
case XMLEvent.END_ELEMENT:
|
||||
EndElement endElement = event.asEndElement();
|
||||
System.out.println("</" + endElement.getName().toString() + ">");
|
||||
break;
|
||||
default:
|
||||
// do nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
InputStream xmlInputStream = new FileInputStream(file);
|
||||
scanFile(project, xmlInputStream, docURI);
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.error("error parsing XML file: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void scanFile(IJavaProject project, InputStream xmlInput, String docURI) throws Exception {
|
||||
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
XMLEventReader eventReader = inputFactory.createXMLEventReader(xmlInput);
|
||||
|
||||
while (eventReader.hasNext()) {
|
||||
XMLEvent event = eventReader.nextEvent();
|
||||
switch (event.getEventType()) {
|
||||
|
||||
case XMLEvent.START_ELEMENT:
|
||||
StartElement startElement = event.asStartElement();
|
||||
|
||||
String namespaceURI = startElement.getName().getNamespaceURI();
|
||||
if (namespaceURI != null && this.namespaceHandler.containsKey(namespaceURI)) {
|
||||
SpringIndexerXMLNamespaceHandler namespaceHandler = this.namespaceHandler.get(namespaceURI);
|
||||
namespaceHandler.processStartElement(project, docURI, startElement, this.handler);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case XMLEvent.CHARACTERS:
|
||||
Characters characters = event.asCharacters();
|
||||
System.out.print(characters.getData());
|
||||
break;
|
||||
case XMLEvent.END_ELEMENT:
|
||||
EndElement endElement = event.asEndElement();
|
||||
System.out.println("</" + endElement.getName().toString() + ">");
|
||||
break;
|
||||
default:
|
||||
// do nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ public class SpringSymbolIndex {
|
||||
private final ConcurrentMap<String, List<SymbolAddOnInformation>> addonInformationByProject;
|
||||
|
||||
private final ExecutorService updateQueue;
|
||||
private final SpringIndexer[] indexer;
|
||||
private SpringIndexer[] indexer;
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(SpringSymbolIndex.class);
|
||||
|
||||
@@ -93,6 +93,8 @@ public class SpringSymbolIndex {
|
||||
deleteProject(project);
|
||||
}
|
||||
};
|
||||
private SpringIndexerXML springIndexerXML;
|
||||
private SpringIndexerJava springIndexerJava;
|
||||
|
||||
private SimpleWorkspaceService getWorkspaceService() {
|
||||
return server.getServer().getWorkspaceService();
|
||||
@@ -122,11 +124,12 @@ public class SpringSymbolIndex {
|
||||
}
|
||||
};
|
||||
|
||||
// Map<String, SpringIndexerXMLNamespaceHandler> namespaceHandler = new HashMap<>();
|
||||
// namespaceHandler.put("http://www.springframework.org/schema/beans", new SpringIndexerXMLNamespaceHandlerBeans());
|
||||
// SpringIndexerXML springIndexerXML = new SpringIndexerXML(handler, namespaceHandler);
|
||||
// this.indexer = new SpringIndexer[] {new SpringIndexerJava(handler, specificProviders), springIndexerXML };
|
||||
this.indexer = new SpringIndexer[] {new SpringIndexerJava(handler, specificProviders)};
|
||||
Map<String, SpringIndexerXMLNamespaceHandler> namespaceHandler = new HashMap<>();
|
||||
namespaceHandler.put("http://www.springframework.org/schema/beans", new SpringIndexerXMLNamespaceHandlerBeans());
|
||||
springIndexerXML = new SpringIndexerXML(handler, namespaceHandler);
|
||||
springIndexerJava = new SpringIndexerJava(handler, specificProviders);
|
||||
|
||||
// this.indexer = new SpringIndexer[] {springIndexerJava};
|
||||
|
||||
this.updateQueue = Executors.newSingleThreadExecutor();
|
||||
|
||||
@@ -167,6 +170,15 @@ public class SpringSymbolIndex {
|
||||
}
|
||||
}
|
||||
|
||||
public void configureIndexer(boolean springXMLSupportEnabled) {
|
||||
if (springXMLSupportEnabled) {
|
||||
this.indexer = new SpringIndexer[] {springIndexerJava, springIndexerXML};
|
||||
}
|
||||
else {
|
||||
this.indexer = new SpringIndexer[] {springIndexerJava};
|
||||
}
|
||||
}
|
||||
|
||||
public CompletableFuture<Void> initializeProject(IJavaProject project) {
|
||||
try {
|
||||
if (SpringProjectUtil.isBootProject(project) || SpringProjectUtil.isSpringProject(project)) {
|
||||
@@ -178,6 +190,7 @@ public class SpringSymbolIndex {
|
||||
|
||||
removeSymbolsByProject(project);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
CompletableFuture<Void>[] futures = new CompletableFuture[this.indexer.length];
|
||||
for (int i = 0; i < this.indexer.length; i++) {
|
||||
InitializeProject initializeItem = new InitializeProject(project, this.indexer[i]);
|
||||
|
||||
Reference in New Issue
Block a user