Reset ImportCollector to match scope
diff --git a/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/compilationunit/CompilationUnitSourceBuilder.java b/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/compilationunit/CompilationUnitSourceBuilder.java
index fbffc8a..cedb6d8 100644
--- a/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/compilationunit/CompilationUnitSourceBuilder.java
+++ b/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/compilationunit/CompilationUnitSourceBuilder.java
@@ -86,53 +86,58 @@
@Override
public void createSource(StringBuilder source, String lineDelimiter, PropertyMap context, IImportValidator validator) {
// add CU scope to import validator chain
- IImportCollector collector = new CompilationUnitScopedImportCollector(validator.getImportCollector(), getPackageName());
+ IImportCollector origImportCollector = validator.getImportCollector();
+ IImportCollector collector = new CompilationUnitScopedImportCollector(origImportCollector, getPackageName());
validator.setImportCollector(collector);
+ try {
+ // loop through all types recursively to ensure all simple names that will be created are "consumed" in the import validator
+ consumeAllTypeNamesRec(m_types, collector);
- // loop through all types recursively to ensure all simple names that will be created are "consumed" in the import validator
- consumeAllTypeNamesRec(m_types, collector);
+ //declared imports
+ for (String s : m_declaredImports) {
+ collector.addImport(s);
+ }
+ for (String s : m_declaredStaticImports) {
+ collector.addStaticImport(s);
+ }
- //declared imports
- for (String s : m_declaredImports) {
- collector.addImport(s);
- }
- for (String s : m_declaredStaticImports) {
- collector.addStaticImport(s);
- }
+ // header
+ StringBuilder headerSourceBuilder = new StringBuilder();
+ super.createSource(headerSourceBuilder, lineDelimiter, context, validator);
- // header
- StringBuilder headerSourceBuilder = new StringBuilder();
- super.createSource(headerSourceBuilder, lineDelimiter, context, validator);
+ // package declaration
+ if (!StringUtils.isEmpty(getPackageName())) {
+ headerSourceBuilder.append("package ").append(getPackageName()).append(';').append(lineDelimiter).append(lineDelimiter);
+ }
- // package declaration
- if (!StringUtils.isEmpty(getPackageName())) {
- headerSourceBuilder.append("package ").append(getPackageName()).append(';').append(lineDelimiter).append(lineDelimiter);
- }
+ // type sources
+ StringBuilder typeSourceBuilder = new StringBuilder();
+ for (ITypeSourceBuilder typeBuilder : getTypes()) {
+ if (typeBuilder != null) {
+ typeBuilder.createSource(typeSourceBuilder, lineDelimiter, context, validator);
+ }
+ }
- // type sources
- StringBuilder typeSourceBuilder = new StringBuilder();
- for (ITypeSourceBuilder typeBuilder : getTypes()) {
- if (typeBuilder != null) {
- typeBuilder.createSource(typeSourceBuilder, lineDelimiter, context, validator);
+ // imports
+ Collection<String> importsToCreate = collector.createImportDeclarations();
+ if (importsToCreate.size() > 0) {
+ for (String imp : importsToCreate) {
+ headerSourceBuilder.append(imp).append(lineDelimiter);
+ }
+ headerSourceBuilder.append(lineDelimiter);
+ }
+
+ source.append(headerSourceBuilder);
+ source.append(typeSourceBuilder);
+ source.append(lineDelimiter);
+
+ // footer
+ for (ISourceBuilder f : m_footerSourceBuilders) {
+ f.createSource(source, lineDelimiter, context, validator);
}
}
-
- // imports
- Collection<String> importsToCreate = collector.createImportDeclarations();
- if (importsToCreate.size() > 0) {
- for (String imp : importsToCreate) {
- headerSourceBuilder.append(imp).append(lineDelimiter);
- }
- headerSourceBuilder.append(lineDelimiter);
- }
-
- source.append(headerSourceBuilder);
- source.append(typeSourceBuilder);
- source.append(lineDelimiter);
-
- // footer
- for (ISourceBuilder f : m_footerSourceBuilders) {
- f.createSource(source, lineDelimiter, context, validator);
+ finally {
+ validator.setImportCollector(origImportCollector); // reset scope
}
}
diff --git a/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/type/EnclosingTypeScopedImportCollector.java b/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/type/EnclosingTypeScopedImportCollector.java
index c27cacf..76bbc52 100644
--- a/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/type/EnclosingTypeScopedImportCollector.java
+++ b/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/type/EnclosingTypeScopedImportCollector.java
@@ -13,6 +13,7 @@
import java.util.HashSet;
import java.util.Set;
+import org.eclipse.scout.sdk.core.IJavaRuntimeTypes;
import org.eclipse.scout.sdk.core.importcollector.IImportCollector;
import org.eclipse.scout.sdk.core.importcollector.WrappedImportCollector;
import org.eclipse.scout.sdk.core.model.api.IJavaEnvironment;
@@ -62,8 +63,12 @@
m_enclosingQualifiers.add(qname);
IType t = env.findType(qname);
if (t != null) {
- for (IType s : t.superTypes().withSuperTypes(true).list()) {
- m_enclosingQualifiers.add(s.name());
+ for (IType s : t.superTypes().list()) {
+ String fqnName = s.name();
+ if (IJavaRuntimeTypes.Object.equals(fqnName)) {
+ continue;
+ }
+ m_enclosingQualifiers.add(fqnName);
for (IType i : s.innerTypes().list()) {
m_enclosedSimpleNames.add(i.elementName());
}
diff --git a/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/type/TypeSourceBuilder.java b/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/type/TypeSourceBuilder.java
index 3396115..16bce63 100644
--- a/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/type/TypeSourceBuilder.java
+++ b/org.eclipse.scout.sdk.core/src/main/java/org/eclipse/scout/sdk/core/sourcebuilder/type/TypeSourceBuilder.java
@@ -93,50 +93,56 @@
@Override
public void createSource(StringBuilder source, String lineDelimiter, PropertyMap context, IImportValidator validator) {
- IImportCollector collector = new EnclosingTypeScopedImportCollector(validator.getImportCollector(), this);
+ IImportCollector origImportCollector = validator.getImportCollector();
+ IImportCollector collector = new EnclosingTypeScopedImportCollector(origImportCollector, this);
validator.setImportCollector(collector);
- super.createSource(source, lineDelimiter, context, validator);
+ try {
+ super.createSource(source, lineDelimiter, context, validator);
- if (Flags.isInterface(getFlags()) && getSuperTypeSignature() != null) {
- throw new IllegalArgumentException("An interface can not have a superclass.");
- }
-
- // type definition
- source.append(Flags.toString(getFlags())).append(' ');
- source.append(((getFlags() & Flags.AccInterface) != 0) ? ("interface ") : ("class "));
- source.append(getElementName());
-
- // type parameters
- if (!m_typeParameters.isEmpty()) {
- source.append(ISignatureConstants.C_GENERIC_START);
- for (ITypeParameterSourceBuilder p : m_typeParameters) {
- p.createSource(source, lineDelimiter, context, validator);
- source.append(", ");
+ if (Flags.isInterface(getFlags()) && getSuperTypeSignature() != null) {
+ throw new IllegalArgumentException("An interface can not have a superclass.");
}
- source.setLength(source.length() - 2);
- source.append(ISignatureConstants.C_GENERIC_END);
- }
- // super type (extends)
- if (!StringUtils.isEmpty(getSuperTypeSignature())) {
- String superTypeRefName = validator.useSignature(getSuperTypeSignature());
- source.append(" extends ").append(superTypeRefName);
- }
+ // type definition
+ source.append(Flags.toString(getFlags())).append(' ');
+ source.append(((getFlags() & Flags.AccInterface) != 0) ? ("interface ") : ("class "));
+ source.append(getElementName());
- // interfaces
- Iterator<String> interfaceSigIterator = getInterfaceSignatures().iterator();
- if (interfaceSigIterator.hasNext()) {
- source.append(((getFlags() & Flags.AccInterface) != 0) ? (" extends ") : (" implements "));
- source.append(validator.useSignature(interfaceSigIterator.next()));
- while (interfaceSigIterator.hasNext()) {
- source.append(", ").append(validator.useSignature(interfaceSigIterator.next()));
+ // type parameters
+ if (!m_typeParameters.isEmpty()) {
+ source.append(ISignatureConstants.C_GENERIC_START);
+ for (ITypeParameterSourceBuilder p : m_typeParameters) {
+ p.createSource(source, lineDelimiter, context, validator);
+ source.append(", ");
+ }
+ source.setLength(source.length() - 2);
+ source.append(ISignatureConstants.C_GENERIC_END);
}
+
+ // super type (extends)
+ if (!StringUtils.isEmpty(getSuperTypeSignature())) {
+ String superTypeRefName = validator.useSignature(getSuperTypeSignature());
+ source.append(" extends ").append(superTypeRefName);
+ }
+
+ // interfaces
+ Iterator<String> interfaceSigIterator = getInterfaceSignatures().iterator();
+ if (interfaceSigIterator.hasNext()) {
+ source.append(((getFlags() & Flags.AccInterface) != 0) ? (" extends ") : (" implements "));
+ source.append(validator.useSignature(interfaceSigIterator.next()));
+ while (interfaceSigIterator.hasNext()) {
+ source.append(", ").append(validator.useSignature(interfaceSigIterator.next()));
+ }
+ }
+ source.append(" {");
+ createTypeContent(source, lineDelimiter, context, validator);
+ source.append(lineDelimiter);
+ source.append('}');
}
- source.append(" {");
- createTypeContent(source, lineDelimiter, context, validator);
- source.append(lineDelimiter);
- source.append('}');
+ finally {
+ validator.setImportCollector(origImportCollector); // reset scope
+ }
}
/**