aboutsummaryrefslogtreecommitdiff
path: root/src/lombok/transformations
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@tipit.to>2009-06-15 20:28:25 +0200
committerReinier Zwitserloot <reinier@tipit.to>2009-06-15 20:28:25 +0200
commit842cefb75c735d333f3c55bcedf690f3c2f0eb18 (patch)
tree04d9050ef8f243af7ab19ddebe1b972dd84b380b /src/lombok/transformations
parent8353911b1d3a8d59a07042976bb924a7eccb5d0d (diff)
downloadlombok-842cefb75c735d333f3c55bcedf690f3c2f0eb18.tar.gz
lombok-842cefb75c735d333f3c55bcedf690f3c2f0eb18.tar.bz2
lombok-842cefb75c735d333f3c55bcedf690f3c2f0eb18.zip
Moved TypeResolver to the eclipse package, as it has eclipse-specific code in it.
Diffstat (limited to 'src/lombok/transformations')
-rw-r--r--src/lombok/transformations/TypeResolver.java100
1 files changed, 0 insertions, 100 deletions
diff --git a/src/lombok/transformations/TypeResolver.java b/src/lombok/transformations/TypeResolver.java
deleted file mode 100644
index 3c3617a6..00000000
--- a/src/lombok/transformations/TypeResolver.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package lombok.transformations;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import lombok.eclipse.EclipseAST;
-import lombok.eclipse.EclipseAST.Node;
-
-import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.ImportReference;
-import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.TypeReference;
-
-public class TypeResolver {
- private final TypeLibrary library;
- private Collection<String> imports;
-
-
- public TypeResolver(TypeLibrary library, EclipseAST.Node top) {
- this.library = library;
- this.imports = makeImportList((CompilationUnitDeclaration) top.getEclipseNode());
- }
-
- private static Collection<String> makeImportList(CompilationUnitDeclaration declaration) {
- Set<String> imports = new HashSet<String>();
- if ( declaration.currentPackage != null ) imports.add(toQualifiedName(declaration.currentPackage.getImportName()) + ".*");
- if ( declaration.imports != null ) for ( ImportReference importStatement : declaration.imports ) {
- imports.add(toQualifiedName(importStatement.getImportName()));
- }
- return imports;
- }
-
- public Collection<String> findTypeMatches(Node context, TypeReference type) {
- Collection<String> potentialMatches = library.findCompatible(toQualifiedName(type.getTypeName()));
- if ( potentialMatches.isEmpty() ) return Collections.emptyList();
-
- if ( type.getTypeName().length > 1 ) return potentialMatches;
-
- String simpleName = new String(type.getTypeName()[0]);
-
- //If there's an import statement that explicitly imports a 'Getter' that isn't any of our potentials, return no matches.
- if ( nameConflictInImportList(simpleName, potentialMatches) ) return Collections.emptyList();
-
- //Check if any of our potentials is even imported in the first place. If not: no matches.
- potentialMatches = eliminateImpossibleMatches(potentialMatches);
- if ( potentialMatches.isEmpty() ) return Collections.emptyList();
-
- //Find a lexically accessible type of the same simple name in the same Compilation Unit. If it exists: no matches.
- Node n = context;
- while ( n != null ) {
- if ( n.getEclipseNode() instanceof TypeDeclaration ) {
- char[] name = ((TypeDeclaration)n.getEclipseNode()).name;
- if ( name != null && new String(name).equals(simpleName) ) return Collections.emptyList();
- }
- n = n.up();
- }
-
- // The potential matches we found by comparing the import statements is our matching set. Return it.
- return potentialMatches;
- }
-
- private Collection<String> eliminateImpossibleMatches(Collection<String> potentialMatches) {
- Set<String> results = new HashSet<String>();
-
- for ( String importedType : imports ) {
- Collection<String> reduced = library.findCompatible(importedType);
- reduced.retainAll(potentialMatches);
- results.addAll(reduced);
- }
-
- return results;
- }
-
- private boolean nameConflictInImportList(String simpleName, Collection<String> potentialMatches) {
- for ( String importedType : imports ) {
- if ( !toSimpleName(importedType).equals(simpleName) ) continue;
- if ( potentialMatches.contains(importedType) ) continue;
- return true;
- }
-
- return false;
- }
-
- private static String toSimpleName(String typeName) {
- int idx = typeName.lastIndexOf('.');
- return idx == -1 ? typeName : typeName.substring(idx+1);
- }
-
- private static String toQualifiedName(char[][] typeName) {
- StringBuilder sb = new StringBuilder();
- boolean first = true;
- for ( char[] c : typeName ) {
- sb.append(first ? "" : ".").append(c);
- first = false;
- }
- return sb.toString();
- }
-}