From 900e2e9e80a6642d86084f576be8c29739dcf7ff Mon Sep 17 00:00:00 2001 From: Martin Monperrus Date: Tue, 23 May 2017 10:29:32 +0200 Subject: [PATCH] refactor: handle some rare limit cases --- .../reflect/visitor/DefaultJavaPrettyPrinter.java | 10 ++++++---- .../java/spoon/reflect/visitor/ImportScannerImpl.java | 4 ++-- .../support/compiler/jdt/JDTBasedSpoonCompiler.java | 4 +++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java b/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java index 2781fcda428..a28862103cf 100644 --- a/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java +++ b/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java @@ -581,10 +581,12 @@ public void visitCtConstructor(CtConstructor constructor) { if (constructor.getFormalCtTypeParameters().size() > 0) { printer.write(' '); } - if (constructor.getDeclaringType().isLocalType()) { - printer.write(constructor.getDeclaringType().getSimpleName().replaceAll("^[0-9]*", "")); - } else { - printer.write(constructor.getDeclaringType().getSimpleName()); + if (constructor.getDeclaringType() != null) { + if (constructor.getDeclaringType().isLocalType()) { + printer.write(constructor.getDeclaringType().getSimpleName().replaceAll("^[0-9]*", "")); + } else { + printer.write(constructor.getDeclaringType().getSimpleName()); + } } elementPrinterHelper.writeExecutableParameters(constructor); elementPrinterHelper.writeThrowsClause(constructor); diff --git a/src/main/java/spoon/reflect/visitor/ImportScannerImpl.java b/src/main/java/spoon/reflect/visitor/ImportScannerImpl.java index 41edede7b11..54c6cf7cbfc 100644 --- a/src/main/java/spoon/reflect/visitor/ImportScannerImpl.java +++ b/src/main/java/spoon/reflect/visitor/ImportScannerImpl.java @@ -350,7 +350,7 @@ protected boolean addClassImport(CtTypeReference ref) { } catch (ParentNotInitializedException e) { } CtPackageReference pack = targetType.getPackage(); - if (ref.getPackage() != null && !ref.getPackage().isUnnamedPackage()) { + if (pack != null && ref.getPackage() != null && !ref.getPackage().isUnnamedPackage()) { // ignore java.lang package if (!ref.getPackage().getSimpleName().equals("java.lang")) { // ignore type in same package @@ -372,7 +372,7 @@ protected boolean isImportedInClassImports(CtTypeReference ref) { // we consider that if a class belongs to java.lang or the same package than the actual class // then it is imported by default - if (ref.getPackage() != null && !ref.getPackage().isUnnamedPackage()) { + if (pack != null && ref.getPackage() != null && !ref.getPackage().isUnnamedPackage()) { // ignore java.lang package if (!ref.getPackage().getSimpleName().equals("java.lang")) { // ignore type in same package diff --git a/src/main/java/spoon/support/compiler/jdt/JDTBasedSpoonCompiler.java b/src/main/java/spoon/support/compiler/jdt/JDTBasedSpoonCompiler.java index 58ba2da04e5..ff14d04245c 100644 --- a/src/main/java/spoon/support/compiler/jdt/JDTBasedSpoonCompiler.java +++ b/src/main/java/spoon/support/compiler/jdt/JDTBasedSpoonCompiler.java @@ -472,7 +472,9 @@ protected void generateProcessedSourceFilesUsingCUs() { List printedFiles = new ArrayList<>(); for (spoon.reflect.cu.CompilationUnit cu : factory.CompilationUnit().getMap().values()) { - factory.getEnvironment().debugMessage("Generating source for compilation unit: " + cu.getFile()); + if (cu.getDeclaredTypes().size() == 0) { // case of package-info + continue; + } CtType element = cu.getMainType();